ページをダウンロードしてデータベースにデータを保存するスパイダーがあります。データベースを表示する管理パネル(Flask-Admin拡張機能による)を使用してフラスコアプリケーションを作成しました。次に、スパイダーの状態を制御するためにフラスコアプリに機能を追加します。オン/オフを切り替えます。
スレッドやマルチプロセッシングで可能だと思います。プログラム全体で最小限のメモリを使用する必要があるため、Celeryは適切な決定ではありません。
この関数を実装するためにどの方法を選択しますか?
ページをダウンロードしてデータベースにデータを保存するスパイダーがあります。データベースを表示する管理パネル(Flask-Admin拡張機能による)を使用してフラスコアプリケーションを作成しました。次に、スパイダーの状態を制御するためにフラスコアプリに機能を追加します。オン/オフを切り替えます。
スレッドやマルチプロセッシングで可能だと思います。プログラム全体で最小限のメモリを使用する必要があるため、Celeryは適切な決定ではありません。
この関数を実装するためにどの方法を選択しますか?
セロリは時間と空間の両方でオーバーヘッドが低いため、メモリ使用量に基づいてセロリを割り引くことはおそらく間違いです。実際、Celery + Flaskを使用しても、Flaskを単独で使用するよりも多くのメモリを使用することはありません。
さらに、Celeryには、使用されるメモリの量に影響を与える可能性のあるいくつかの選択肢があります。たとえば、5つの異なるプールの実装があり、それらはすべて異なる長所とトレードオフを持っています。プールの選択肢は次のとおりです。
デフォルトでは、Celeryはマルチプロセッシングを使用します。つまり、子プロセスを生成して作業をオフロードします。これは最もメモリを消費するオプションです。すべての子プロセスが必要なベースメモリの量を複製するからです。
ただし、Celeryには、実行する作業がほとんどない場合はワーカープロセスを強制終了し、作業が多い場合は新しいプロセスを生成する自動スケール機能も付属しています。
$ celeryd --autoscale=0,10
ここで、0は最小プロセス数、10は最大プロセス数です。ここで、celerydは子プロセスなしで開始し、最大10プロセスまでの負荷に基づいて成長します。負荷が減少すると、ワーカープロセスの数も減少します。
イベントレット/イベントプールを使用する場合、使用されるプロセスは1つだけであるため、使用するメモリは大幅に少なくなりますが、ブロックコードを呼び出すタスクが他のタスクの実行をブロックするという欠点があります。タスクの大部分がI/Oバウンドである場合は、問題がないはずです。代わりに、さまざまなプールを組み合わせて、問題のあるタスクをマルチプロセッシングプールに送信することもできます。
セロリには、スレッドを使用したプールも付属しています。
バージョン2.6になる開発バージョンには多くの最適化が含まれており、Flask-Celery拡張モジュールは不要になりました。今後数日で本番環境に移行しない場合は、次のようにインストールする必要がある開発バージョンを試してみることをお勧めします。
$ pip install https://github.com/ask/kombu/zipball/master
$ pip install https://github.com/ask/celery/zipball/master
新しいAPIもFlaskに触発されているため、新しいスタートガイドを読む必要があります。
http://ask.github.com/celery/getting-started/first-steps-with-celery.html
とはいえ、これまでのところ、ほとんどの最適化作業は実行速度に重点を置いており、おそらくさらに多くのメモリ最適化を行うことができます。これまでのところリクエストはありませんが、Celeryがメモリの制約と一致しないという万が一の場合は、バグトラッカーで問題を解決して、問題に焦点を当てることができると確信しています。そうする。
マルチプロセスまたはサブプロセスを使用してプロセスをハイパービゼーションしてから、セッションの周りにハンドルを渡すことができます。