请老师看下捡豆子异步代码哪里有问题,函数值运行一次
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全能工程师
- 参与学习 人
- 提交作业 16416 份
- 解答问题 4469 个
全新版本覆盖5大热门就业方向:Web全栈、爬虫、数据分析、软件测试、人工智能,零基础进击Python全能型工程师,从大厂挑人到我挑大厂,诱人薪资在前方!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星