私のプログラムには 2 つの整数があります。a
それらを「 」および「 」と呼びましょうb
。それらを合計して、結果として別の整数を取得したいと思います。これらは通常の Pythonint
オブジェクトです。不思議なんだけど; それらを Twisted と一緒に追加するにはどうすればよいですか? performAsynchronousAddition
どこかに特別な機能はありますか?が必要Deferred
ですか? 原子炉はどうですか?原子炉が関与していますか?
3 に答える
わかりました。
Twisted はCPU バウンドのタスクについては何もしませんが、これ には正当な理由があります。サブタスクの順序を変更することによって、コンピューティング バウンド ジョブをこれ以上高速化する方法はありません。可能な唯一のことは、コンピューティング リソースを追加することです。そして、その実装の微妙さのために、それでさえPythonではうまくいきません。
Twisted は、プログラムが「スタック」した場合に備えて、特別なセマンティクスとイベント ループ処理を提供します。ほとんどの場合、プロセスは別のマシンで実行され、ネットワーク接続を介してねじれたプロセスと通信します。とにかく待っているので、twisted はその間により多くのことを行うためのメカニズムを提供します。つまり、twisted はI/O バウンド タスクに並行性を提供します。
tl;dr: twisted はネットワーク コード用です。それ以外はすべて通常の python です。
これはどう:
c = a + b
これは機能するはずであり、非同期で実行する必要はありません (かなり高速です)。
良い質問です。Twisted (または Python) には、少なくとも "a + b" を複数のコア (私の 8 コア i7) で生成する方法が必要です。
残念ながら、Python GIL はこれを防止します。つまり、CPU にバインドされたタスクだけでなく、1 つのコアがジョブを実行している間、他の 7 つのコアが何もしていない間、待機する必要があります。
注: より良い例は、「a() + b()」、または「fact(sqrt(a()**b())」などですが、重要な事実は、上記の操作が 1 つのコアをロックし、 GILは、その操作中にPythonが他のことをするのをほとんど防ぎます。これは数ミリ秒になる可能性があります...