web-dev-qa-db-ja.com

python3-非同期メソッドから結果を取得します

私はPythonの初心者です。 asyncioを使用して簡単なスクラッププログラムを作成しました。これが私のコードスニペットです

 loop = asyncio.get_event_loop()
 task = loop.create_task(conSpi.parse(arguments.url))
 value = loop.run_until_complete(asyncio.wait([task]))
 loop.close()

返される結果をvalueで出力したい。変数の値を出力するのではなく、次のように出力します。

 {<Task finished coro=<ConcurrentSpider.parse() done, 
 defined at /home/afraz/PycharmProjects/the-lab/concurrentspider.py:28> result=3>}

`

結果のみを取得し、残りを印刷しないようにするにはどうすればよいですか?

9
Afraz Ahmad

最も簡単なアプローチは書くことです

value = loop.run_until_complete(task)

これは、1つのタスクを待機する場合にのみ機能します。複数のタスクが必要な場合は、asyncio.waitを正しく使用する必要があります。完了した先物と保留中の先物を含むタプルを返します。ただし、デフォルトでは、保留中の先物はすべての先物が完了するのを待つため、空になります。

だから何かのような

done, pending = loop.run_until_complete(asyncio.wait( tasks))
for future in done:
    value = future.result() #may raise an exception if coroutine failed
    # do something with value
15
Sam Hartman