Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 20, 2010 17:26:09

Alek86
От:
Зарегистрирован: 2010-01-20
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

параллельный таймер

может кто подсказать с задачкой?

мне нужно выполнять какое-то действие (допустим, функцию Func()) каждую минуту
но при этом функция может выполняться дольше минуты, потому хотелось бы какой-то “правильной” обработки (то есть сделать “дешево и сердито” - новый поток, в котором вызывается колбек и sleep(скоко_надо_времени) - не выйдет)

желательно, чтобы таймер работал типа winapi'шного waitable timer, то есть отсылал сигналы, да и “принимающая сторона” правильно обрабатывала ситуацию, когда функция выполняется дольше минуты

есть ли для этого уже готовый компонент?



Офлайн

#2 Янв. 20, 2010 18:51:03

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

параллельный таймер

А что нужно делать, если функция выполняется дольше минуты?



Офлайн

#3 Янв. 20, 2010 19:35:19

Alek86
От:
Зарегистрирован: 2010-01-20
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

параллельный таймер

вариантов много
в винде, кажись, после отработки функции, если таймер уже n раз успел просигналить, то приходит одно сообщение, в котором указано, сколько на самом деле было сигналов

реализовать то, думаю, можно
хотелось бы отлаженный компонент найти, ибо задача довольно частая



Офлайн

#4 Янв. 20, 2010 21:14:28

st00nsa
От:
Зарегистрирован: 2009-01-14
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

параллельный таймер

наверное я сейчас посоветую бяку но, 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 милисекунд)



Офлайн

#5 Янв. 21, 2010 10:13:35

Alek86
От:
Зарегистрирован: 2010-01-20
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

параллельный таймер

да, это немного бяка :)
нужно тогда функцию Func() готовить ко всем “параллельным проблемам”: race conditions, deathlocks и все такое…
к тому же со временем это может, наверное, привести ко всяким другим проблемам, типа что количество параллельно работающих потоков может все увеличиваться и увеличиваться

если в стандартных питоновских либах такого нету, то может стоит подключить гуевую либу какую-нить? там это уже должно быть…



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version