ipython で twisted の deferred を await する
気付いてなかったけど、 ipython で await できるようになっていた 。
ドキュメントを読むに、なんか関数書けば対応を足せそうだったので、 twisted の deferred を await できるようにしてみる。
twisted は asyncio と違って、一度 reactor を動かしてしまうと止められなくなってしまうので、そのへんいい感じにやってくれる crochet を利用しつつ、以下のようなコードを置いておく。
$HOME/.ipython/profile_default/startup/99-twisted_runner.py
:
try: import crochet from twisted.internet import defer except ImportError: pass else: def twisted_runner(deferred): crochet.setup() result = crochet.run_in_reactor( lambda: defer.ensureDeferred(deferred))() return result.wait(2**31)
後は %autoawait twisted_runner
で有効にする。
こんな感じ:
In [1]: %autoawait twisted_runner
In [2]: import treq
In [3]: r = await treq.get('http://localhost')
In [4]: data = await r.text()
In [5]: print(data)
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...