============================================ ipython で twisted の deferred を await する ============================================ 気付いてなかったけど、 `ipython で await できるようになっていた`_ 。 .. _`ipython で await できるようになっていた`: https://ipython.readthedocs.io/en/stable/interactive/autoawait.html ドキュメントを読むに、なんか関数書けば対応を足せそうだったので、 twisted の deferred を await できるようにしてみる。 twisted は asyncio と違って、一度 reactor を動かしてしまうと止められなくなってしまうので、そのへんいい感じにやってくれる `crochet`_ を利用しつつ、以下のようなコードを置いておく。 .. _`crochet`: https://pypi.org/project/crochet/ ``$HOME/.ipython/profile_default/startup/99-twisted_runner.py``: .. code:: python 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) Welcome to nginx! ...