首页   注册   登录
 zzth370 最近的时间轴更新

zzth370

V2EX 第 286180 号会员,加入于 2018-01-24 16:06:51 +08:00
zzth370 最近回复了
广州移动,8 元保底套餐,20 元 20G 流量套餐,美滋滋
一样的状态,后悔读书时没有培养一个爱好,不然也不至于无聊时只能发呆
import asyncio


async def worker_1():
print('worker_1 start')
await asyncio.sleep(1)
print('worker_1 done')

async def worker_2():
print('worker_2 start')
await asyncio.sleep(2)
print('worker_2 done')

async def main():
task1 = asyncio.create_task(worker_1())
task2 = asyncio.create_task(worker_2())
print('before await')
await asyncio.sleep(2)
print('awaited worker_1')
await asyncio.sleep(1)
print('awaited worker_2')


if __name__ == '__main__':
asyncio.run(main())

源码是这样的,就修改了下 main()里面的
而你代码二中 await task 造成了一定的误解,造成主动 await 才会执行 task 的假象
个人见解
async def main():
task1 = asyncio.create_task(worker_1())
task2 = asyncio.create_task(worker_2())
print('before await')
await asyncio.sleep(2)
print('awaited worker_1')
await asyncio.sleep(1)
print('awaited worker_2')
结果:
before await
worker_1 start
worker_2 start
worker_1 done
awaited worker_1
worker_2 done
awaited worker_2


我把 main 里面的稍微改了下,得到跟你一样的结果,我感觉是 create_task 时就已经把两个任务添加到协程的任务列表里面去了,然后后面遇到阻塞就切换,然后就会得到跟 1 不一样的结果
看过一个新闻,这样的是可以要求赔偿的,当然看你愿不愿意花时间
215 天前
回复了 RangerM 创建的主题 职场话题 公司开始 955 了
955 舒服啊
266 天前
回复了 kelmous 创建的主题 酷工作 平安内推科技类岗位地点不限
深圳的
266 天前
回复了 kelmous 创建的主题 酷工作 平安内推科技类岗位地点不限
python 方向的有么
351 天前
回复了 miyuki 创建的主题 全球工单系统 京东的"内鬼级"劫持
mark
关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2695 人在线   最高记录 5043   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.3 · 14ms · UTC 12:33 · PVG 20:33 · LAX 04:33 · JFK 07:33
♥ Do have faith in what you're doing.