56

私が達成したいシーケンス:

  1. ユーザーが Web ページのボタンをクリックする
  2. model.py の一部の関数が実行を開始します。たとえば、インターネットをクロールしてデータを収集する
  3. 関数が終了すると、結果がユーザーに返されます。

関数を実行するには、model.py 内で新しいスレッドを開く必要がありますか? もしそうなら、どうすればいいですか?

4

3 に答える 3

28
  1. はい、マルチスレッド化できますが、通常はCeleryを使用して同等のことを行います。celery-django チュートリアルでその方法について読むことができます。
  2. 実際に、ユーザーに Web サイトを待つよう強制したいということはほとんどありません。タイムアウトのリスクを冒すよりはましですが。

これがあなたが説明していることの例です。

User sends request
Django receives => spawns a thread to do something else.
main thread finishes && other thread finishes 
... (later upon completion of both tasks)
response is sent to user as a package.

より良い方法:

User sends request
Django receives => lets Celery know "hey! do this!"
main thread finishes
response is sent to user
...(later)
user receives balance of transaction 
于 2013-07-11T19:25:55.467 に答える