首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python无限循环阻塞异步并发任务

python无限循环阻塞异步并发任务
EN

Stack Overflow用户
提问于 2019-04-28 20:19:17
回答 1查看 405关注 0票数 1

也许我理解错了,但这是我的问题。

正如我在纪录片中所读到的,您需要创建任务来同时执行它们:

代码语言:javascript
复制
async def main():
x=1
lastman = deque([])
    while True:
        task1 = asyncio.create_task(get_salt())
        task2 = asyncio.create_taks(get_sugar_every10_secondes())

        await task1
        await task2

async def get_salt():
    salt = await salt.fetch()
    print(salt)

async def get_sugar_every10_secondes():
    await asyncio.sleep(10)
    sugar = await sugar.fetch()
    print(sugar)

 asyncio.get_even_loop().run_until_completed(main())

问题是,我每10秒钟只能得到盐和糖,但我希望盐越快越好,糖越快越好。(py3.7)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-28 22:16:37

代码语言:javascript
复制
while True:
    # ...
    await task1
    await task2

这部分的意思是:

  1. 等待task1完成时
  2. 然后等待task2完成时
  3. 然后继续循环

在完成这两项任务之前,不会重新创建任何任务。

相反,您应该创建两个任务,每个任务在while True循环中调用自己的协同工作。这样,他们中的任何一个都不应该等其他人做。

就像这样:

代码语言:javascript
复制
import asyncio
from collections import deque


async def do_constantly(coro_func):
    while True:
        await coro_func()


async def get_salt():
    await asyncio.sleep(1)
    print('salt')


async def get_sugar_every10_secondes():
    await asyncio.sleep(10)
    print('sugar')


async def main():
    task1 = asyncio.create_task(do_constantly(get_salt))
    task2 = asyncio.create_task(do_constantly(get_sugar_every10_secondes))


loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.run_forever()  # to keep tasks spawning
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55894252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档