実行に時間がかかるコード (2 ~ 3 日) を書きましたが、それをサーバーにプッシュしてそこで実行したいと考えています。コードには、相互に作用するクラスと関数が豊富に含まれていますが、最終的にはコード全体の実行が単一の関数 (test2) を介して行われ、それが機能します。私にとっての解決策はタスクキューである可能性があり、同時に複数のタスクを実行する必要がないため、RQ が私のニーズに合う可能性があることがわかりました。
#action_test.py
import action2
def test1():
fl = action2.FollowersList()
mech = action2.Mechanics()
manager = action2.Manager()
manager.launch(mech,fl)
for i in range(0,10):
manager.iterate(mech,fl)
def test2():
messageList = []
fl = action2.FollowersList()
mech = action2.Mechanics()
manager = action2.Manager()
manager.launch(mech,fl)
for i in range(0,2000):
message = manager.iterate(mech,fl)
messageList.append(message)
return messageList
リモートサーバーに Reddis をセットアップしました。デーモンモードで実行します。私は test2 関数をキューに入れるだけの簡単なモジュールを書きました。
#app.py
from rq import Connection, Queue
from redis import Redis
from action_test import test2
def main():
# Tell RQ what Redis connection to use
redis_conn = Redis()
q = Queue(connection=redis_conn) # no args implies the default queue
# Delay calculation of the multiplication
job = q.enqueue(test2, timeout = 259200)
print job.result # => None
if __name__ == '__main__':
main()
次に、問題が発生しました: python-rq ドキュメント Web ページ ( http://python-rq.org/docs/workers/ ) で、説明されているワーカーを起動する方法は実行することです
$ rqworker
シェルから。しかし、このワーカーはデーモンとして起動しないため、アプリが ssh 経由でセットアップされているこのリモート サーバーに接続しているときに、ssh 接続がダウンするとワーカーもダウンし、これは私が望む動作ではありません。持つため。コードの実行中に 2 ~ 3 日間 ssh 接続を維持すると、私の場合は python-rq を使用する以外のロジック全体が拒否されます。この問題を回避する方法はありますか? おそらく、デーモン化するシェルからではなく、python-rq ワーカーを起動する必要がありますか?