21

django-rq を使用して、django サイトで実行時間の長いタスクを処理しています。これらのタスクは、(私が推測する) rqworker の 180 秒のタイムアウトをトリップします。

JobTimeoutException: Job exceeded maximum timeout value (180 seconds).

このタイムアウト値を増やすにはどうすればよいですか? --timeout 360 を rqworker コマンドに追加しようとしましたが、認識されません。

私のpythonコードでは、長時間実行されるジョブは次の方法で呼び出されます

        django_rq.enqueue(
            populate_trends,
            self,
        )

そして試してみました

        django_rq.enqueue_call(
            func=populate_trends,
            args=(self,),
            timeout=3600,
        )

rq docsで気づいたのですが、django-rq にはそのような方法がないようです。

アップデート

今のところ、django-rq をフォークし、プレースホルダーの修正を追加してタイムアウトを増やしました。長期的な解決策を得るには、おそらくプロジェクトと協力する必要があります。私は議論するためにそこで問題を開始しました。

4

4 に答える 4

29

これは、問題にアプローチする正しい方法のようです。

queue = django_rq.get_queue('default')
queue.enqueue(populate_trends, args=(self,), timeout=500) 

kwargs を渡す必要がある場合は、

queue = django_rq.get_queue('default')
queue.enqueue(populate_trends, args=(self,), kwargs={'x': 1,}, timeout=500) 

助けてくれた django-rq プロジェクトの selwin に感謝します。

于 2013-03-16T06:03:09.173 に答える
9

更新: タイムアウト パラメータをキーワード引数として django-rq の @job デコレータに渡すことができます。最初にキュー名の引数を渡す必要があることに注意してください。

@job("default", timeout=600)
def long_running_task():
    ...
于 2016-06-15T10:28:59.443 に答える