私は定期的にHTTPリクエストを送信しますが、任意の時点で(メインプロセスと呼ばれる)他のスレッド/プロセスによって中断することができます(要求プロセスと呼ばれる)プロセスを書いています。で、Tornadoで割り込み可能なtime.sleepを実装する方法は?
# in the main process
poison_pill_event= multiprocessing.Event()
# pass "poison_pill_event" to the requesting process
# in the requesting process which sends requests every wait_interval seconds
poison_pill_event.wait(timeout=time_interval)
これは私がtime.sleep(の割り込みバージョンを持つことができるようになる):当初、私は次の要求を送信する前に適切な遅延を待つmultiprocessing.Event
オブジェクトとの要求のためのスレッドプールを使用していましたケース私はプロセスを殺す必要があります。それ以外の場合は、タイムアウト後にコードを実行し続けることができます。
最近私は、必要なスループットとリソースを考慮すると、非同期設計が優れた選択肢であり、私はTornadoを使用しようとしていることがわかりました。 gen.sleep
をノンブロッキング待ちとして使用し始めましたが、中断することはできません。 その後、割り込みを許可するためにToro.Event's wait functionを使用して切り替えました。ただし、Toro.Eventのdelay
はマルチプロセスと異なります。イベントのtimeout
では、タイムアウト例外が発生し、実行が中止されます。また、私はプロセス間で共有することはできないと信じているので、現在私の主なプロセスを要求プロセスとマージしようとしていますが、それはあまり難しくありません。
私の質問は、私が竜巻でmultiprocessing.Event.wait
とした振る舞いをどのように再考できますか?
素晴らしい作品です!これを使用しているすべてのノート: 'condition.wait'は時間がかかります。ただし、数値を指定するとエラーは発生しませんが、同じ方法では動作しません。数値はIOLoop.timeと同じ参照点を持つ絶対時間値とみなされているようです。助けをもう一度@ A2Jありがとうございます。 –