3
>>> import asyncio
>>> help(asyncio.wait)

..

Help on function wait in module asyncio.tasks:

wait(fs, *, loop=None, timeout=None, return_when='ALL_COMPLETED')
    Wait for the Futures and coroutines given by fs to complete.

    Coroutines will be wrapped in Tasks.

    Returns two sets of Future: (done, pending).

    Usage:

        done, pending = yield from asyncio.wait(fs)

    Note: This does not raise TimeoutError! Futures that aren't done
    when the timeout occurs are returned in the second set.
(END)

このヘルプの最後の注記がよくわかりません (2 番目のセットとは何ですか? 保留/再処理セットですか? 保留中のタスクを実行し、完了と保留の両方の結果を結合して DB に保存するにはどうすればよいですか?)

私の問題: aiohttp で asyncio を使用しています。何百万もの URL があり、そのうちのいくつかでタイムアウト エラーが発生する可能性があります。それらを再処理のためにキューに送信したい、またはイベントプールで処理する必要があります。

import asyncio
import aiohttp
sem = asyncio.Semaphore(10)

def process_data(url):
    with (yield from sem):
          response = yield from aiohttp.request('GET', url)
          print(response)

loop = asyncio.get_event_loop()
c = asyncio.wait([process_data(url) for url in url_list], timeout=10)
loop.run_until_complete(c)

wait_forPS:メソッドは使用していません。

4

1 に答える 1