Python RQ(v0.5.6およびv0.6.0でテスト済み)を使用してマルチスレッドタスクを実行する際に問題が発生しています。RQタイムアウトでマルチスレッドジョブが終了しない
は私が達成しようとしているものの簡易版として、次のコードを考えてみましょう:
thing.py
from 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秒以内にタイムアウトによって期待どおりに中断されます。
MyThing().hello_task
のようなスレッド/ sを含むタスクを設定しているときに、スレッドが永久に実行され、5秒のタイムアウトが終了しても何も起こらないという問題があります。
タイムアウトがタスク、その息子、孫、妻を殺すように、RQでマルチスレッドタスクを実行するにはどうすればよいですか?
はRQの問題として投稿する良い質問のように聞こえる:https://でgithubのあなたが望むなら、あなたはまた、タイムアウト例外をキャッチし、それを扱うことができる
その方法:そうのように.com/nvie/rq/issues – ErikR
私が何かを逃していないことを確認したい(?) – Kludge