2

私の仕事では、彼らは竜巻を「活用」していますが、非同期ライブラリはありません。ライブラリを非同期にして、トルネードのようなものにより適したものにするのは何ですか? 何か良い例はありますか、それともあなたがしていること、またはあなたがブロックしていないことを示すことができる何かがあると思います__enter____exit__?

いくつかの素材を一緒に引っ掻くのが難しいと感じています。

4

2 に答える 2

4

ライブラリが非同期ではなく、tornado ioloop での実行をサポートしていない場合、これらのタスクを他のスレッドで実行することしかできません。

基本的に、戻り値を受け取るかどうかに応じて、2 つのオプションがあります。

  1. 作業をキューに入れ、一部のスレッドがキューから作業を引き出し、これらのタスクをオフにする ==> 戻り値なし
  2. または、executor ライブラリ (python 3.2) を使用して作業をexecutorに送信し、コールバックを追加してタスクが終了したことを通知し、トルネードの ioloop に制御を戻します (ループにハングした別のコールバックによって)。

別のスレッドにオフロードする同期タスクの場合your_task_funcは、基本的に次の手順を実行します。

def callback(future):
    # here you want to do some stuff with the value future.result()

EXECUTOR.submit(
        your_task_func
        ).add_done_callback(
            lambda future: tornado.ioloop.IOLoop.instance().add_callback(
                partial(callback, future)))

これについての詳細は、この素敵な記事に記載されています。

よろしくマーカス

于 2013-06-02T11:04:21.603 に答える