Я начал с этого: https://stackoverflow.com/questions/12435211/python-threading-timer-repeat-function-every-n-seconds#=телефонный код в точности времени <10 мс выкл
Я хочу отправить MIDI таймкод, кросс-платформенный. Я проверил вход, записанный из моего кода, и время теряет 100 миллисекунд или около того здесь и там, что недостаточно точно - мне нужно послать 96-120 раз в секунду, равномерно распределенные сообщения. Вход, который я получаю от Cubase, очень, очень точен в этом (максимум 1 мс после 10 секунд), но у меня есть чувство (я надеюсь), что я еще не нашел лучший способ сделать это в Python. Кроме того, я хотел бы, чтобы время не зависело от объема обработки, происходящего между вызовами, что, я думаю, будет зависеть от того, сколько музыкальной активности происходит в любой момент. Но это всего лишь временный код, никаких заметок, и даже поэтому время не достаточно точное. Я использую Python 2.7 для Windows 7 (позже OSX 10.9 и Linux). Везде, где я смотрю, я нахожу результаты для кода или функций для бенчмаркинга, но я хочу выполнить код более 100 раз в секунду без дрейфа. Есть идеи? Мой код:
import time
import threading as th
ind = 0
class MyThread(th.Thread):
def __init__(self, event):
th.Thread.__init__(self)
self.stopped = event
self.ind = 0
def run(self):
while not self.stopped.wait(0.01):
self.ind += 1
if self.ind % 100 == 0:
print time.clock()
if self.ind == 1000:
self.stopped.set()
stopFlag = th.Event()
thread = MyThread(stopFlag)
thread.start()
Спасибо, миллион! -Chuckk
Я очень скептически отношусь к тому, что вы можете сделать это с помощью Python и потоковой передачи. Я ожидаю, что пакет, такой как Cubase, будет иметь специализированные процедуры для минимизации дрейфа, которые не ограничены циклом интерпретатора и поточной загрузкой уровня ОС. –
Вы проверили пакет APScheduler? – RaJa
Возможный неявный дубликат http://stackoverflow.com/questions/1133857/how-accurate-is-pythons-time-sleep –