【问题标题】:asyncio return "Task was destroyed but it is pending!"asyncio return "任务被破坏,但它正在等待处理!"
【发布时间】:2016-02-29 11:14:40
【问题描述】:

我是异步编程的新手。我正在尝试编写用于检查网页状态的脚本。 当然,我想这样做是异步的。 我的sn-p:

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! 有人可以指出我犯错的地方吗?

【问题讨论】:

    标签: python python-asyncio aiohttp


    【解决方案1】:

    来自as_completed 的文档:

    返回一个迭代器,其值在等待时是 Future 实例。

    所以你必须awaitas_completed返回的每个对象:

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

    您可能还想查看wait 以获得更细粒度的控制。

    【讨论】:

    • 我没有收到这些错误。使用的是什么版本?
    • 我使用python 3.5、asyncio 3.4.3、aiohttp 0.19
    • 我也是,但我没有收到任何错误;但是,我没有运行ProxyConnector,所以这可能是导致问题的原因?另外,明确关闭事件循环:loop.close()
    猜你喜欢
    • 2017-01-08
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2021-07-25
    • 1970-01-01
    • 2021-11-08
    • 2020-12-14
    相关资源
    最近更新 更多