1

私は非同期プログラミングの初心者です。Web ページのステータスをチェックするために使用されるスクリプトを作成しようとしています。そしてもちろん、私はそれを非同期にしたいと思います。私のスニペット:

import aiohttp
import asyncio

url_site = 'http://anysite.com'
fuzz_file = 'fuzz.txt'


def generate_links(file):
    with open(file) as f:
        return [str(url_site) + str(line.strip()) for line in f]

async def fetch_page(client, url):
    async with client.get(url) as response:
        return response.status

async def run():
    links = generate_links(fuzz_file)
    for f,link in asyncio.as_completed([fetch_page(client,link) for link in links]):
        print("[INFO] [{}] {}".format(f, link))


loop = asyncio.get_event_loop()
conn = aiohttp.ProxyConnector(proxy="http://10.7.0.35:8080")
client = aiohttp.ClientSession(loop=loop, connector=conn)
loop.run_until_complete(run())
client.close()

しかし、次のエラーが表示されます:Task was destroyed but it is pending! 誰かが私が間違えた場所を教えてもらえますか?

4

1 に答える 1

1

のドキュメントからas_completed

待機時に値が Future インスタンスである反復子を返します。

awaitしたがって、によって返されるすべてのオブジェクトが必要ですas_completed

for f in asyncio.as_completed([fetch_page(client,link) for link in links]):
    status = await f

よりきめ細かな制御を待つことも検討してください。

于 2015-11-26T20:46:21.943 に答える