2015-08-04 2 views
0

В конечном итоге я пытаюсь запустить несколько потоков threading.timer с разными временами ожидания, но у меня возникли проблемы с тем, чтобы запустить один поток на основе одиночных переменных для правильной работы.Threading.timer interval random

Я добавил строки, чтобы попытаться устранить время обработки, но я все еще не получаю прогнозируемых результатов. Когда я запускаю этот скрипт:

import threading 
import datetime 
import time 

def foo(): 
    print datetime.datetime.now() 

print datetime.datetime.now() 

iterations = 10 

wait = 1 

thread = None 

next_call = time.time() 

while iterations > 0: 
    if thread == None or thread.is_alive() == False: 
     next_call = next_call + wait 
     thread = threading.Timer(next_call - time.time(), foo) 
     thread.start() 
     iterations -= 1 

я получаю этот выход:

2015-08-04 16:46:17.606658 
2015-08-04 16:46:18.656710 
2015-08-04 16:46:19.607990 
2015-08-04 16:46:20.654599 
2015-08-04 16:46:21.626649 
2015-08-04 16:46:22.753762 
2015-08-04 16:46:23.610284 
2015-08-04 16:46:24.729185 
2015-08-04 16:46:25.609802 
2015-08-04 16:46:26.608769 
2015-08-04 16:46:27.610249 

который имеет, казалось бы, случайный образец неопределенности в количестве времени, функция таймера ожидания. Есть ли какой-то способ, которым я могу быть уверен, что функция будет ждать правильного времени?

ответ

0

Возможно, вы захотите попробовать другие машины/конфигурации.

C:\bin\Python27\python.exe C:/www/wsgi/mysite/mysite/test.py 
2015-08-04 20:24:36.491000 
2015-08-04 20:24:37.492000 
2015-08-04 20:24:38.491000 
2015-08-04 20:24:39.491000 
2015-08-04 20:24:40.491000 
2015-08-04 20:24:41.491000 
2015-08-04 20:24:42.491000 
2015-08-04 20:24:43.491000 
2015-08-04 20:24:44.491000 
2015-08-04 20:24:45.491000 
2015-08-04 20:24:46.491000 

Process finished with exit code 0 

Это Windows 7, PyCharm 4.5.1, Python 2.7.9, все 64-разрядные

+0

Я в значительной степени привязан к конкретному использованию этой настройки, малины Pi с raspbian (на основе Debian) и встроенный компилятор с консолью unix. Это какая-то версия python 2.7, я могу уточнить завтра. Любое понимание того, почему это может произойти? –

+0

@NickRothbacher: Я могу только предположить, что ваш компьютер/процессор сильно загружен какой-либо другой программой или службой. –

+0

Хм, хорошо работает 'top' означает, что нет процесса, использующего более половины процента емкости процессора, и ни один из них не использует больше, чем 1% оперативной памяти. Я буду продолжать смотреть, но я думаю, что мне, возможно, придется довольствоваться неточностями. –

0

Если вы ищете ровно секунду разницы между каждым потоком, это то, что документация должна сказать :

Цитируя [Python 3] (https://docs.python.org/3/library/threading.html#timer-objects)

интервал таймер ожидания перед выполнением его действия не может быть точно таким же, как ПЕРИОД al, указанный пользователем.

Смежные вопросы