<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div>From a quick glance, it looks like you're converting from coroutines back to callbacks just so you can partially hide the callbacks. Why not just stick with coroutines? Compare:</div><div><br></div><div><div><font color="#000000"><span style="background-color: rgba(255, 255, 255, 0);"> ping("<a href="http://baidu.com">http://baidu.com</a>") | r -><br> print(r.result())<br> print("something else")</span></font></div><div><font color="#000000"><span style="background-color: rgba(255, 255, 255, 0);"><br></span></font></div><div><font color="#000000"><span style="background-color: rgba(255, 255, 255, 0);"> r = await ping("<a href="http://baidu.com">http://baidu.com</a>")</span></font></div><div><font color="#000000"><span style="background-color: rgba(255, 255, 255, 0);"> print(r.result())</span></font></div><div><font color="#000000"><span style="background-color: rgba(255, 255, 255, 0);"> print("something else")</span></font></div><div><font color="#000000"><span style="background-color: rgba(255, 255, 255, 0);"><br></span></font></div><div><font color="#000000"><span style="background-color: rgba(255, 255, 255, 0);">And this doesn't require a new operator, or multiline lambdas, or a new operator that does its thing and also introduces a multiline lambda, or anything else.</span></font></div><br>Sent from my iPhone</div><div><br>On Sep 28, 2015, at 23:31, å¼ æ²ˆé¹ <<a href="mailto:375956667@qq.com">375956667@qq.com</a>> wrote:<br><br></div><blockquote type="cite"><div><span># The example works with tornado dev verison & python3.5</span><br><span></span><br><span></span><br><span>import tornado</span><br><span>from tornado.httpclient import AsyncHTTPClient</span><br><span>from tornado.concurrent import Future </span><br><span>from tornado.gen import convert_yielded</span><br><span>from functools import wraps</span><br><span></span><br><span>Future.__or__ = Future.add_done_callback</span><br><span></span><br><span>def future(func):</span><br><span> @wraps(func)</span><br><span> def _(*args, **kwds):</span><br><span> return convert_yielded(func(*args, **kwds))</span><br><span> return _</span><br><span></span><br><span></span><br><span></span><br><span>##############</span><br><span></span><br><span>@future</span><br><span>async def ping(url):</span><br><span> httpclient = AsyncHTTPClient()</span><br><span> r = await httpclient.fetch(url)</span><br><span> return r.body.decode('utf-8')</span><br><span></span><br><span></span><br><span>ping("<a href="http://baidu.com">http://baidu.com</a>") | (</span><br><span> lambda r:print(r.result())</span><br><span>)</span><br><span></span><br><span>"""</span><br><span></span><br><span>Maybe python should support arrow syntax for easier use async call ?</span><br><span></span><br><span>Now lambda only can write one line and must have parentheses ...</span><br><span></span><br><span>FOR EXAMPLE</span><br><span></span><br><span>ping("<a href="http://baidu.com">http://baidu.com</a>") | r -></span><br><span> print(r.result())</span><br><span> print("something else")</span><br><span></span><br><span></span><br><span>I saw some discuss in <a href="https://wiki.python.org/moin/AlternateLambdaSyntax">https://wiki.python.org/moin/AlternateLambdaSyntax</a></span><br><span>"""</span><br><span></span><br><span></span><br><span>tornado.ioloop.IOLoop.instance().start()</span><br><span>_______________________________________________</span><br><span>Python-ideas mailing list</span><br><span><a href="mailto:Python-ideas@python.org">Python-ideas@python.org</a></span><br><span><a href="https://mail.python.org/mailman/listinfo/python-ideas">https://mail.python.org/mailman/listinfo/python-ideas</a></span><br><span>Code of Conduct: <a href="http://python.org/psf/codeofconduct/">http://python.org/psf/codeofconduct/</a></span><br></div></blockquote></body></html>