私はいくつかのIO処理を実行し、次にいくつかのCPUバウンド処理(PIL)を実行し、データ(メガバイト程度の大きさ)で応答するHTTPサーバーを持っています。
(a)私の最初のアイデアは、次のようなものです。Twistedに基づくサーバーとIOのプロセス、およびキューを使用したPILのもののいくつかのプロセス。
このアーキテクチャが妥当な場合は、おそらくそれを正確に実行するライブラリがあります。Twistedのマルチプロセスキューです。しかし、私はTwistedの経験があまりなく、そのコミュニティについて何も知らないので、私が見つけたampoule
のは、それが仕事に適したツールであると私を説得するドキュメントも説明も見つからなかったということだけです。
(b)もう1つのアイデアは、複数のサーバーを複数のスレッドで実行し、IOとCPUの両方をそれぞれに実行することです。CPUのものがブロックされるので、これはばかげているように見えますが、多分私はそれを本当に理解していません。
だから、質問:
- これらのアーキテクチャのいずれかが合理的ですか?
- どのように実装しますか(
Twisted
+ampoule
または何を使用しますか?) - (a)の場合、「ワーカー」からサーバースレッドに大量のデータをどのように送信しますか?それとも、どういうわけか直接応答に書き込むようにワーカーに指示できますか?
- 何人の「労働者」が合理的ですか?