2013-10-19 6 views
10

私はチューリップ、Pythonで非同期操作のための将来asyncIOライブラリについてグイドtalkedときSF Pythonのミートに行ってきました。Tulip/asyncIO:すべての呼び出しが非同期で、何が同期するべきなのかを指定するのはなぜですか?

何かを非同期的に実行したい場合は、といくつかのデコレータを使用して、yield fromの後の呼び出しを非同期に実行するように指定できます。それについての良い点は、その関数の中の文を(同期のように)普通に読むことができ、その関数の実行に関して同期しているかのように振る舞います(戻り値とエラー/例外伝播と処理)。

私の質問は、逆の動作、つまり、すべての関数呼び出しをデフォルトでasync(そしてyield fromなし)にして、同期的に何かを実行したいときに別の明示的な構文を持つのはなぜですか? yield fromの使用可能性は小さいasynch PEPの一部、および使用されることはありません必要であることを(別のキーワード/構文仕様の必要性に加えて)

+0

はありがとう、私はそれを感謝しています。 – Gabriel

+0

@iCodez標準ライブラリの名前と同じasyncioがTulipよりも頻繁に使用されると思います。 Tulipタグは既にC++フレームワークのために用意されています。私は(*先行技術*のための 'のpython-multithreading'を参照してください)'のpython-asyncio'とチューリップために参照するすべてのPythonの質問をタグ付け –

+0

試み: '文= tokenize_sent(your_question)。 random.shuffle(文); text = "\ n" .join(文) 'とそれを理解するのが簡単か、意味が同じかどうかを確認してください。非同期では、デフォルトでスクラブルが行われます。プリエンプティブマルチスレッドのすべての問題は、メリットがありません。 – jfs

答えて

14

本当の答えは、グイドあなたが気付いていない場合ので、非同期の降伏点は、コルーチンで明示されているという事実が好きということです;-)「実用性、純度を打つ」呼び出しができることスレッドと同様に並行性の問題への招待です。しかし、明示的にyield fromを書かなければならない場合は、コードの残りの部分に対して原子として見える2つの重要な操作の真中に着地しないことを確認するのはかなり簡単です。

in his PyCon 2013 keynoteに言及しているように、デフォルトでは非同期であるGeventのような他のPython非同期フレームワークがあり、彼はそのアプローチが嫌いです。 (11時58分で):

そして、残念ながら、あなたは、スケジューラは、ランダムな瞬間であなたのタスクと異なるものに スイッチを中断することができることを、まだ問題 の完全に明確ではありません。 [...]あなたはそれが切り替わりませんことを知ることが起こる という今日を呼び出す任意の関数は、明日の誰かが loggingステートメントまたは怠惰なキャッシングや設定 ファイルのコンサルティングを追加することができます。 [...]

11

注意。たぶん、グイドは、関数は常にデフォルトでasyncを指定するように変更されていない理由として彼の話に;-)

それらを売られ過ぎ、それはただリアリズムです。非同期仕掛けは、新たなオーバーヘッドと意味合併症をもたらす、とPythonが遅くなると書き込みがいくつかのアプリケーションを容易にするためにの生活を複雑にするつもりはありません。要するに

は、

関連する問題