You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何向asession.run()传递可变数量的异步函数且不提前执行

问题根源

你代码中functionList.append(get_html(url))的写法等价于直接调用了get_html异步函数,所以会立刻执行,而AsyncHTMLSession.run()要求传入的是未执行的无参异步函数对象,不需要提前调用传参。

修复方案

只需要把带参数的get_html包装成无参的函数对象即可,推荐两种稳定写法:

写法1:使用functools.partial固定参数(兼容性最好)

from requests_html import AsyncHTMLSession
from functools import partial

asession = AsyncHTMLSession()

urls = [
    'https://python.org/',
    'https://reddit.com/',
    'https://google.com/'
]

async def get_html(url):
    r = await asession.get(url)
    return r

functionList = []
for url in urls:
    # partial会将原函数和传入的参数绑定,返回新的无参可调用对象,不会立刻执行原函数
    functionList.append(partial(get_html, url))

results = asession.run(*functionList)
for result in results:
    print(result.html.url)

写法2:使用异步lambda包装

注意要通过url=url的写法提前绑定当前循环的url值,避免闭包变量延迟捕获的问题:

# 其余代码和上面一致,仅修改循环部分
for url in urls:
    functionList.append(lambda url=url: get_html(url))

内容的提问来源于stack exchange,提问作者pulsar777

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:57:02