使用协程实现调用接口 验证抽奖概率

原文地址

在原先的基础上使用协程进行改进,提高效率

  • fetch 函数:用于发送请求并返回响应文本。
    delay 用于指定延迟时间
python 复制代码
async def fetch(session, url, headers, payload, delay=0):
    await asyncio.sleep(delay)
    async with session.post(url, headers=headers, data=payload, ssl=False) as response:
        return await response.text()
  • main 函数:创建一个 aiohttp.ClientSession 会话,并启动多个并发的 fetch 任务。asyncio.gather 用于等待所有任务完成,并收集它们的结果。
python 复制代码
async def main(url, headers, payload, n, delay):
    d = defaultdict(int)
    lock = asyncio.Lock()  # 创建锁

    async with aiohttp.ClientSession() as session:
        tasks = [fetch_and_update(session, url, headers, payload, d, lock, delay) for _ in range(n)]
        await asyncio.gather(*tasks)

    return d
  • 任务列表:tasks 列表包含了 n 个 fetch 任务。
  • 解析响应:所有响应返回后,逐个解析 JSON 数据并更新结果字典 d。
  • 运行主协程:使用 asyncio.get_event_loop() 和 loop.run_until_complete(main(...)) 启动和运行主协程,获取最终结果。
python 复制代码
if __name__ == '__main__':
	url = ''
	headers = ''
	payload = ''
	n = 100000
	delay = 0.1 # 单位是s
	loop = asyncio.get_event_loop()
	result = loop.run_until_complete(main(url, headers, payload, n, delay))
	get_lottery(result)
	

加锁

由于是对同一个字典进行操作,需要保证操作的线程安全性,保证数据一致性,需要加锁处理 ,使用asyncio.Lock

python 复制代码
async def fetch_and_update(session, url, headers, payload, d, lock, delay):
    response = await fetch(session, url, headers, payload, delay)
    jsonobj = json.loads(response)
    reward_name = jsonobj['']

    async with lock:  # 确保对字典的访问是线程安全的
        d[reward_name] += 1


def get_lottery(d):
    for key, value in d.items():
        lottery = value / n
        print(key + "的概率是:" + '{:.2%}'.format(lottery))
相关推荐
jufeng130710 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 11 篇】
python·ai agent·mcp
En^_^Joy10 小时前
Django项目配置全攻略:settings配置文件
后端·python·django
for_ever_love__11 小时前
python基础语法学习: 异常的传递性
开发语言·python·学习
AC赳赳老秦11 小时前
公开图片 OCR 数据提取:OpenClaw 合规采集公开信息图,识别文字与表格并转化为结构化数据
java·大数据·前端·数据库·python·php·openclaw
麻雀飞吧12 小时前
零基础选量化工具,先把问题说清楚
人工智能·python
段一凡-华北理工大学12 小时前
AI推动工业智能化转型~系列文章20:工业 AI 平台架构:云-边-端协同的技术体系
人工智能·python·架构·工业平台·云-边协同
CodeBlog-star12 小时前
Harness Engineering:Pi Agent 架构深度解析
人工智能·python·架构·harness工程
简不变12 小时前
将components下的文件夹复制到别一个文件夹下,并重新生成CMakelist.txt文件
python
AC赳赳老秦13 小时前
风控岗应用:OpenClaw 采集公开司法与经营异常数据,自动生成企业风险评估报告
大数据·c语言·数据库·人工智能·python·php·openclaw