0
だから、私はちょうど非同期プログラミング(特にトルネードフレームワーク)のまわりで私の頭をラップしようとしている、と私は基本から始めたいと思った:2つのコルーチンの「待っている」の呼び出し:2つのシーケンシャルコルーチン(非同期関数)が並行して実行されないのはなぜですか?
from tornado.ioloop import IOLoop
from tornado.web import Application, url, RequestHandler
from tornado.gen import sleep
class TestHandler(RequestHandler):
async def get(self):
f1 = await self.test("f1")
f2 = await self.test("f2")
self.write(f1 + " " + f2)
async def test(self, msg):
for i in range(5):
print(i)
await sleep(1) # this is tornado's async sleep
return msg
app = Application([url(r'/', TestHandler)], debug=True)
app.listen(8080)
ioloop = IOLoop.current()
ioloop.start()
問題は、しかし、私は私のブラウザでlocalhost:8080
を襲った、と私のpythonコンソールを見つめたとき、私はトルネードFAQを読んだ
0 1 2 3 4
の2つの織り交ぜシーケンスが、二つの連続シーケンスを...表示されていないということです私が間違ってやっていることを理解できていないように思えます。
2番目のコードブロック(待望の先物)は並行して実行されません...私はあなたを誤解していますか? – StevieP
ああ、そうです。このパターンは '@ gen.coroutine'で動作しましたが、' async def'関数は何かがそれらを待つまで開始しません。 –
ベストプラクティスを説明してもらえますか? Tornadoと 'asyncio'(特に' async'/'await')は実際にはうまくいっていないようです。非同期コードの書き込み/飾り付けについてはどうしたらよいですか(竜巻を使用する場合) – StevieP