5

uwsgi(2プロセス)の背後で実行されているFlaskWebアプリを実行しています。私のコードの一部には、リモートリソースへのping、変更されているかどうかの確認(If-Modified-Since)、および変更されている場合はWebサーバー上のそのリソースのローカルコピーの更新が含まれます。

この更新により、差分の電子メールも送信されます。これには時間がかかり、メールの送信中にユーザーリクエストがタイムアウトするのではないかと心配しています。

Pythonスレッドライブラリはこれに取り組む正しい方法ですか?(スレッドを生成し、そこに電子メールを送信しますか?)これはuwsgiのプロセスにまったく干渉しますか?

助けてくれてありがとう!

(補足:2つのuwsgiプロセスが両方ともローカルコピーのリソースを更新しようとすると、ヘッドがぶつかることについても少し心配しています...スレッドモジュールのロック機能が正しいかどうか疑問に思いますこの問題も?)

編集:明確にするために、私の主な関心事は、電子メールタスクがコード実行の一部であるということです。return_template呼び出しの前に時間がかかり、実行されるため、ユーザーへの応答が保留されます。Flask / uwsgi環境を考えると、Pythonスレッドライブラリはこの問題に取り組む正しい方法ですか?

4

2 に答える 2

6

この種のタスクに最適なソリューションは、uWSGIスプーラーを使用することです。特定の間隔でタスクを実行したい場合は、@ timerデコレータを使用して、スプーラをハードワークさせることができます。

from uwsgidecorators import *

#this will execute the_task() every 30 seconds in the spooler
@timer(30, target='spooler')
def the_task(signum)
    do_the_long_task()
于 2011-09-16T04:06:03.967 に答える
2

サーバーに依存しないアプリを作成しようとする場合(たとえば、後でuWSGIをGunicornに置き換えることを考えている場合)、Celeryを使用することをお勧めします

最初の手順は次のとおりです。http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html

于 2011-09-16T06:45:04.740 に答える