試驗了一下,下面這段代碼竟然是同步執行的,請問如何改為異步呢?謝謝!
import tornado.ioloop
import tornado.web
import asyncio
lst = [i for i in range(50)]
async def diaodu_thread():
for i in lst:
await walk(i)
async def walk(arg):
print('----start %s ----' % arg)
await asyncio.sleep(3)
print('----end %s ----' % arg)
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
asyncio.run(diaodu_thread())
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
uj5u.com熱心網友回復:
diaodu_thread函式做下修改
async def diaodu_thread():
#for i in lst:
# await walk(i)
tasks = []
for i in lst:
tasks.append(asyncio.create_task(walk(i)))
await asyncio.gather(*tasks)
uj5u.com熱心網友回復:
試驗了一下,如果改為下面這樣,也是可以的吧:
async def diaodu_thread():
coroutines = []
for i in lst:
coroutines.append(walk(i))
await asyncio.wait(coroutines)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/100963.html
