- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有 2 个工作:“wash_clothes”(job1) 和“setup_cleaning_robot”(job2),每个工作需要你 7 和 3 秒,你必须做到世界末日。
这是我的代码:
import asyncio
async def wash_clothes():
print(f'Start job1')
await asyncio.sleep(3)
print(f'Finish job1, took 3 seconds')
async def setup_cleaning_robot():
print(f'Start job2')
await asyncio.sleep(7)
print(f'Finish job2, took 7 seconds')
async def not_really_asyncio():
kk = 1
while True:
job_list = [wash_clothes(), setup_robot()]
await asyncio.gather(*job_list)
kk += 1
async def main():
await not_really_asyncio()
# await really_asyncio() # Still don't know how to do
if __name__ == '__main__':
asyncio.run(main())
Start job1
Start job2
Finish job1, took 3 seconds
Finish job2, took 7 seconds
Start job1
Start job2
Finish job1, took 3 seconds
Finish job2, took 7 seconds
...
...
Start job1
Start job2
Finish job1, took 3 seconds
Start job1
Finish job1, took 3 seconds
Start job1
Finish job2, took 7 seconds
Start job2
Finish job1, took 3 seconds
...
...
最佳答案
您希望当前代码中没有发生的关键事情是,当洗完衣服时,即使清洁机器人仍在进行中(并且将再持续 4 秒),您也会立即再次开始洗衣服。但是这里的这一行阻止了:
async def not_really_asyncio():
kk = 1
while True:
job_list = [wash_clothes(), setup_robot()]
await asyncio.gather(*job_list) # <--- Waits until *both* finish
kk += 1
asyncio.gather
等到所有作业完成。所以即使
wash_clothes
已完成,
gather
会继续只是坐在那里等待
setup_robot
也完成。
while
循环,使用 asyncio.wait()
而不是 gather
.这允许您等到其中一个任务完成,此时您可以立即启动它的另一个实例。asyncio.wait()
非常繁琐(它的参数是任务而不是协程,你必须挑选它的返回值)和你的 while
loop 将只需要运行那些尚未运行的任务。 while
对两个任务中的每一个进行循环。您可以将它们放在单独的函数中或直接放在 wash_clothes()
中。和 setup_cleaning_robot()
职能。 counter = 0
async def keep_washing_clothes():
while True:
await wash_clothes()
global counter
counter += 1
async def keep_setting_up_cleaning_robot():
while True:
await setup_cleaning_robot()
global counter
counter += 1
async def really_asyncio():
job_list = [keep_washing_clothes(), keep_setting_up_cleaning_robot()]
await asyncio.gather(*job_list)
print()
中,您可能会发现更容易理解发生了什么。输出:
# At the start of your script:
from datetime import datetime
# Later on:
print(datetime.utcnow().isoformat(), 'Finish job2, took 7 seconds')
关于python-asyncio - 使用 asyncio 做多项终极工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60187221/
意识到这可能是主观的,具体取决于手头的项目,我正在寻找构建 VS (Visual Studio) 解决方案的“最佳实践”方法。 请随意编辑此内容、评论您认为可能不正确的内容、提出替代方案等。我很高兴看
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visi
我维护和协作一些用 CommonJS 编写的 JavaScript 模块,这些模块需要高质量的 UMD 包装器。 依赖项来自 npm 但至少有 CommonJS 和 AMD 支持(或者我可以添加它)。
Intellisense 在我的 VS 上运行得非常糟糕...... 当我用 C++ 编写代码时,它可以 100% 正常工作,直到我开始使用模板,然后它才会完全停止工作,停止检测错误并且不会在所有情况
Microsoft网站具有冲突的信息: http://msdn.microsoft.com/en-us/library/ms182372.aspx ...使用Visual Studio Premium
我是一名优秀的程序员,十分优秀!