4

要件:

  • 開始時刻t、バッチサイズs、呼び出し間隔i、および処理すべきリストを持つ「ジョブ」を定義します
  • 時間tから開始して、 i秒ごとにリストから次の s個のアイテムを取得して処理します
  • ジョブは一時停止および再開できます (ユーザーは、処理のために新しいリスト項目を取得するのを停止するようにジョブに指示できる必要があります)

Flask は Web アプリに使用されます。明らかに、処理コードを定期的に実行するバックグラウンド プロセス/スレッドが必要です。

状態はデータベースに永続化されるため、私が考えることができる最も簡単なアプローチは、アクティブなジョブをチェックして処理を実行する python スクリプトを定期的に実行する cronjob を定義することです。

Pythonのみを使用してこれを設計する方法に関する提案はありますか?

  • アクティブなジョブを定期的にチェックして実行する別の Python プロセスを開始しますか?
  • Flask からワーカー スレッドを生成しますか?
  • ... ?
4

1 に答える 1

4

Redis や RabbitMQ などのキューイング メカニズムを使用することを強くお勧めします。Flask はプロデューサーとして機能し、「ワーカー」は消費して処理します。

これらのツールのいずれかを設定することは、あなたが期待するほど困難ではありません。

sudo apt-get install redis-server
sudo apt-get install python-pip
sudo pip install redis

フラスコアプリはプロデューサーとして機能します

>>> from redis import Redis
>>> r = Redis()
>>> r.lpush('task_queue', 'task1')
1L

そして、あなたの「ワーカー」は非同期的に消費して処理します:

>>> r.rpop('task_queue')
'task1'
于 2012-09-29T10:24:50.080 に答える