2015-05-21 1 views
0

Я начал с этого: 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

+4

Я очень скептически отношусь к тому, что вы можете сделать это с помощью Python и потоковой передачи. Я ожидаю, что пакет, такой как Cubase, будет иметь специализированные процедуры для минимизации дрейфа, которые не ограничены циклом интерпретатора и поточной загрузкой уровня ОС. –

+0

Вы проверили пакет APScheduler? – RaJa

+0

Возможный неявный дубликат http://stackoverflow.com/questions/1133857/how-accurate-is-pythons-time-sleep –

ответ

0

Если вам нужна точность ниже 10 мс, вам необходимо запрограммировать это в реальной системе реального времени, как микропроцессор. Windows 7 не будет достаточно точным из-за прерываний. Из того, что я знаю, для Windows это лучше всего 16 мс.