У меня возникли проблемы с запуском многопоточных задач с использованием python RQ (проверено на v0.5.6 и v0.6.0).RQ Таймаут не убивает многопоточные задания
Рассмотрим следующий фрагмент кода, как упрощенная версия того, что я пытаюсь достичь:
thing.pyfrom threading import Thread
class MyThing(object):
def say_hello(self):
while True:
print "Hello World"
def hello_task(self):
t = Thread(target=self.say_hello)
t.daemon = True # seems like it makes no difference
t.start()
t.join()
main.py
from rq import Queue
from redis import Redis
from thing import MyThing
conn = Redis()
q = Queue(connection=conn)
q.enqueue(MyThing().say_hello, timeout=5)
При выполнении main.py
(в то время как rqworker работает в фоновом режиме), работа прерывается, как ожидалось, таймаутом в течение 5 секунд.
Проблема заключается в том, что когда я устанавливаю задачу, содержащую thread/s, такую как MyThing().hello_task
, поток работает вечно, и ничего не происходит, когда 5-секундный тайм-аут завершен.
Как запустить многопоточную задачу с RQ, чтобы тайм-аут убьет задачу, ее сыновей, внуков и их жен?
звучит как хороший вопрос к сообщению как RQ вопрос: https: // GitHub .com/nvie/rq/issues – ErikR
Хотелось убедиться, что я ничего не пропустил (?) – Kludge