Python:如何同时循环处理表格中的URL及对应等待时长任务?
实现方案(基于Python asyncio)
要实现并行处理所有URL的「首次解析→对应时长等待→再次解析」流程,而非逐个串行处理,用Python的asyncio异步框架可以轻松实现,以下是具体代码和说明:
核心思路
每个URL对应一个独立的异步任务,所有任务同时启动:
- 每个任务先完成首次URL请求(解析)
- 任务自身等待指定时长(不阻塞其他任务)
- 完成等待后执行第二次URL请求(解析)
代码示例
import asyncio import aiohttp # 用于异步HTTP请求,需先安装:pip install aiohttp # 定义你的URL和等待时长数据 url_wait_list = [ {"url": "url1", "wait_time": 2}, {"url": "url2", "wait_time": 4}, {"url": "url3", "wait_time": 5}, ] async def process_url_task(session, url, wait_time): # 首次解析URL(这里用GET请求模拟解析操作) print(f"首次解析 {url}") async with session.get(url) as resp: # 这里可以添加解析逻辑,比如获取响应内容 content = await resp.text() # 等待指定时长(单位:秒) print(f"{url} 等待 {wait_time} 秒") await asyncio.sleep(wait_time) # 再次解析URL print(f"再次解析 {url}") async with session.get(url) as resp: content = await resp.text() async def main(): # 创建异步HTTP会话 async with aiohttp.ClientSession() as session: # 创建所有任务 tasks = [ process_url_task(session, item["url"], item["wait_time"]) for item in url_wait_list ] # 并行运行所有任务 await asyncio.gather(*tasks) if __name__ == "__main__": asyncio.run(main())
关键说明
- 并行执行:
asyncio.gather(*tasks)会同时启动所有任务,各个URL的「请求-等待-请求」流程互不阻塞 - 等待逻辑:
await asyncio.sleep(wait_time)是任务自身等待,不影响其他任务的执行,比如url1等待2秒的同时,url2和url3也在各自的流程中推进 - 解析操作:示例中用
aiohttp的异步请求模拟URL解析,你可以根据实际需求替换成对应的解析逻辑(比如解析HTML、接口数据等)
内容的提问来源于stack exchange,提问作者Ashraf
相关产品推荐
相关产品推荐

