私はTornado Asyncフレームワークを使用してREST Webサーバーを実装しています。Tornadoでの非同期バックグラウンドタスクの実行
同じサーバーのバックグラウンドで高CPU負荷の定期的なタスクを実行する必要があります。
低優先度定期タスクです。すべてのアイドル状態のコアで常時実行する必要がありますが、Webサーバーのパフォーマンスに影響を与えたくありません(HTTP要求の負荷が高い場合、優先順位は低くなります)。
私はトルネードIOLoop APIでこれを行うことはできますか?
tornado.ioloop.PeriodicCallback
を使用して、定期的なバックグラウンドタスクを呼び出すことができます。しかし、この作業が計算量が多い場合、Webサービスにパフォーマンスの問題が発生する可能性があります。
concurrent.futures.ProcessPoolExecutor
感謝。私がWebサーバーから作業者を分離すると、Webサーバーに影響を与えるかどうかを気にせずに、同じサーバー上で作業者を実行させることはできません。したがって、別の独立したコアで別のプロセスを使用することをお勧めしますか? (私は今、トルネードがコアごとにプロセスを生成させるようにします) – ShaharAあなたの設定は何か分かりません。カーネルスケジューラはプロセス管理(とそのリソース)をかなりうまく扱いますが、もちろん各プロセスが他のプロセスにCPUやIOをもたらす可能性があります。ソリューションはcgroup(プレーンまたはドッカーのようなコンテナ)を使用することができます。繰り返しますが、重要な情報は、あなたが持っているリソースの量と、あなたがクリスタルボールが必要なテストなしで、ワーカー、Webサーバーがどれくらい必要としたかです。 – kwarunek