Большая разница во времени в threading.Event (). Wait между Python 2 и 3 - PullRequest
0 голосов
/ 17 июня 2020

Я знаю на основе этой ссылки , что код для реализации Event (). Wait отличается, но я не думаю, что это должно учитывать большую разницу в эти времена.

У меня есть приложение, которое отправляет позиционные пакеты с частотой 60 Гц (каждые 0,0166666666667 с), приложение, получающее эти пакеты, предсказывает следующие позиции на основе скорости объектов. Когда время выравнивается, объект на другом конце уже находится в отправляемой позиции, поэтому визуального перехода в позицию нет. Это происходит в Python 2, но не в 3. Python 3.8.2 слишком долго ожидает отправки следующего пакета в потоке, и объект в другом приложении превысил отправляемую позицию.

class taskThread(threading.Thread):

def __init__(self, interval=None):
    '''
    Initializer function:
    interval - The time interval to repeate calls to the 'task' function.
    '''
    super(taskThread, self).__init__()
    self._finished = threading.Event()
    self._interval = float(interval)

def setInterval(self, interval):
    self._interval = float(interval)

def shutdown(self):
    self._finished.set()

def run(self):
    while True:
        if self._finished.isSet():
            return
        tnow = time.time()
        self.task()
        self._finished.wait(self._interval - (time.time() - tnow))
        print(time.time() - tnow)

def task(self):
    '''
    The task function.
    Derived classes must implement this function.
    '''
    raise Exception('Task must be implemented!')

def __enter__(self):
    self.start()
    return self

def __exit__(self, type, value, traceback):
    self.shutdown()
    return True

Python 2.7.0 последовательно печатает:

0.0169999599457
0.0169999599457
0.0170001983643
0.0169999599457
0.0169999599457
0.0169999599457
0.0169999599457
0.0169999599457

Python 3.8.2 ждет намного дольше

0.031026363372802734
0.0320279598236084
0.031026363372802734
0.031026840209960938
0.031527042388916016
0.031026601791381836
0.03103041648864746
0.03302431106567383

Я что-то делаю неправильно для Python 3?

...