Alek86
Янв. 20, 2010 17:26:09
может кто подсказать с задачкой?
мне нужно выполнять какое-то действие (допустим, функцию Func()) каждую минуту
но при этом функция может выполняться дольше минуты, потому хотелось бы какой-то “правильной” обработки (то есть сделать “дешево и сердито” - новый поток, в котором вызывается колбек и sleep(скоко_надо_времени) - не выйдет)
желательно, чтобы таймер работал типа winapi'шного waitable timer, то есть отсылал сигналы, да и “принимающая сторона” правильно обрабатывала ситуацию, когда функция выполняется дольше минуты
есть ли для этого уже готовый компонент?
Ed
Янв. 20, 2010 18:51:03
А что нужно делать, если функция выполняется дольше минуты?
Alek86
Янв. 20, 2010 19:35:19
вариантов много
в винде, кажись, после отработки функции, если таймер уже n раз успел просигналить, то приходит одно сообщение, в котором указано, сколько на самом деле было сигналов
реализовать то, думаю, можно
хотелось бы отлаженный компонент найти, ибо задача довольно частая
st00nsa
Янв. 20, 2010 21:14:28
наверное я сейчас посоветую бяку но,
http://docs.python.org/library/thread.html?highlight=thread#thread.start_new_thread судя по этому
import thread
import time
while True:
thread.start_new_thread(название функции,[агрументы])
sleep(n милисекунд)
Alek86
Янв. 21, 2010 10:13:35
да, это немного бяка :)
нужно тогда функцию Func() готовить ко всем “параллельным проблемам”: race conditions, deathlocks и все такое…
к тому же со временем это может, наверное, привести ко всяким другим проблемам, типа что количество параллельно работающих потоков может все увеличиваться и увеличиваться
если в стандартных питоновских либах такого нету, то может стоит подключить гуевую либу какую-нить? там это уже должно быть…