请老师看下捡豆子异步代码哪里有问题,函数值运行一次
import random
import asyncio
"""
async 定义异步函数
await 执行异步
gather 将异步函数批量执行
run 执行主异步函数
"""
# 豆子总数
beans = list(range(1, 51))
async def child_a():
a_beans = []
bean_num = len(beans)
while bean_num > 0:
a_gather_bean = random.choice(beans)
a_beans.append(a_gather_bean)
beans.remove(a_gather_bean)
bean_num -= 1
await asyncio.sleep(random.random())
return 'child_a捡了%s个豆子,还剩%s个'%(len(a_beans), bean_num)
async def child_b():
b_beans = []
bean_num = len(beans)
while bean_num > 0:
b_gather_bean = random.choice(beans)
b_beans.append(b_gather_bean)
beans.remove(b_gather_bean)
bean_num -= 1
await asyncio.sleep(random.random())
return 'child_b捡了%s个豆子,还剩%s个'%(len(b_beans), bean_num)
async def main():
result = await asyncio.gather(child_a(), child_b())
return result
if __name__ == '__main__':
result = asyncio.run(main())
print("a_beans:", result[0])
print("b_beans:", result[1])
运行结果如下,只执行了一次,请问怎么改进?
14
收起
正在回答
1回答
同学,你好!
1、在函数中遇到return会返回并结束函数,以上代码中需要将return写在最后
2、bean_num应为全局变量,child_a()和child_a()都应对同一个bean_num进行修改
参考代码:
import random import asyncio """ async 定义异步函数 await 执行异步 gather 将异步函数批量执行 run 执行主异步函数 """ # 豆子总数 beans = list(range(1, 51)) bean_num = len(beans) async def child_a(): a_beans = [] global bean_num while bean_num > 0: a_gather_bean = random.choice(beans) a_beans.append(a_gather_bean) beans.remove(a_gather_bean) bean_num -= 1 print('child_a捡了%s个豆子,还剩%s个' % (len(a_beans), bean_num)) await asyncio.sleep(random.random()) # return 'child_b捡了%s个豆子,还剩%s个' % (len(b_beans), bean_num) return 'child_a捡了%s个豆子,还剩%s个' % (len(a_beans), bean_num) async def child_b(): b_beans = [] global bean_num while bean_num > 0: b_gather_bean = random.choice(beans) b_beans.append(b_gather_bean) beans.remove(b_gather_bean) bean_num -= 1 await asyncio.sleep(random.random()) print('child_b捡了%s个豆子,还剩%s个' % (len(b_beans), bean_num)) return 'child_b捡了%s个豆子,还剩%s个' % (len(b_beans), bean_num) async def main(): result = await asyncio.gather(child_a(), child_b()) return result if __name__ == '__main__': result = asyncio.run(main()) print("a_beans:", result[0]) print("b_beans:", result[1])
祝学习愉快~
相似问题
登录后可查看更多问答,登录/注册
Python全能工程师
- 参与学习 人
- 提交作业 16247 份
- 解答问题 4470 个
全新版本覆盖5大热门就业方向:Web全栈、爬虫、数据分析、软件测试、人工智能,零基础进击Python全能型工程师,从大厂挑人到我挑大厂,诱人薪资在前方!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星