0

Flask のルート要求で、スレッドをトリガーして開始し、すぐに次の行に続行するにはどうすればよいですか。以下のコードでは、新しいスレッドが生成された直後に、終了するまで約 10 秒待つのではなく、「既に次へ」という出力を取得するにはどうすればよいですか?

ありがとう!

def consumer(searchValue,assignedUniqueID):
    print "Searching..."
    print "Running thread! Args:", (searchValue, assignedUniqueID)
    time.sleep(10)
    print "Done!"

@app.route('/_search')
def add_numbers():
    assignedUniqueID = str(uuid.uuid4())
    Thread(target=consumer(searchValue,assignedUniqueID)).start()
    print "Onto the next already"
    return jsonify(result="33434443",
                       assignedUniqueID = assignedUniqueID
               )
4

1 に答える 1

1

申し訳ありませんが、これは回答というよりもコメントです。コメント システムには少し大きいため、ここに投稿しています。

この種のバグは、Flask でスレッド ローカル ストレージその他の魔法を多用しているため、追跡するのが難しい場合があります。

Web アプリケーションでは、スレッドの代わりにキューを使用してマルチタスキングが処理されることが多く、Web アプリケーションがタスクをキューに入れ、バックグラウンド デーモン (ワーカー) がジョブを実行します。このアプローチは、スケーリングがはるかに優れています。

  • 労働者は他のマシンに住むことができます
  • 並行して実行されているワーカーの数は、実行中のスレッドの数よりも簡単に制御できます。スレッドを使用しているときに、わずかなトラフィックの急増でもサーバーが停止するのを見てきました。
  • 同期や並行性の処理が簡単です

特に人気があるのは、AMQPまたはredismemcachedなどのキー/バリュー データベースを含むソリューションです。Python での AMQP については、celeryを見てください。Django と組み合わせてよく使用します。

于 2013-05-20T02:07:13.193 に答える