非同期タスクとして実行される関数から値を取得する 質問する

非同期タスクとして実行される関数から値を取得する 質問する

私は次のコードを試していました:

import asyncio

@asyncio.coroutine
def func_normal():
        print("A")
        yield from asyncio.sleep(5)
        print("B")
        return 'saad'

@asyncio.coroutine
def func_infinite():
    i = 0
    while i<10:
        print("--"+str(i))
        i = i+1
    return('saad2')

loop = asyncio.get_event_loop()

tasks = [
    asyncio.async(func_normal()),
    asyncio.async(func_infinite())]

loop.run_until_complete(asyncio.wait(tasks))
loop.close()

これらの関数から変数の値を取得する方法がわかりません。これはできません:

asyncio.async(a = func_infinite())

これはキーワード引数になります。これを実現するにはどうすればよいでしょうか?

ベストアンサー1

コルーチンはそのまま動作します。戻り値を使用するだけですloop.run_until_complete()asyncio.gather()複数の結果を収集するために呼び出す:

#!/usr/bin/env python3
import asyncio

@asyncio.coroutine
def func_normal():
    print('A')
    yield from asyncio.sleep(5)
    print('B')
    return 'saad'

@asyncio.coroutine
def func_infinite():
    for i in range(10):
        print("--%d" % i)
    return 'saad2'

loop = asyncio.get_event_loop()
tasks = func_normal(), func_infinite()
a, b = loop.run_until_complete(asyncio.gather(*tasks))
print("func_normal()={a}, func_infinite()={b}".format(**vars()))
loop.close()

出力

--0
--1
--2
--3
--4
--5
--6
--7
--8
--9
A
B
func_normal()=saad, func_infinite()=saad2

おすすめ記事