Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x python无限循环阻止异步IO并发任务_Python 3.x_Python Asyncio - Fatal编程技术网

Python 3.x python无限循环阻止异步IO并发任务

Python 3.x python无限循环阻止异步IO并发任务,python-3.x,python-asyncio,Python 3.x,Python Asyncio,也许我理解错了,但这是我的问题 正如我在纪录片中所读到的,您需要创建任务来同时执行它们: 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 awai

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

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

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秒只得到盐和糖的输出,但我希望盐和糖的输出速度尽可能快,每10秒。(py3.7)

本部分是指:

  • 等待任务1完成
  • 然后等待任务2完成
  • 然后继续循环
  • 在完成这两项任务之前,不会重新创建任何任务

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

    大概是这样的:

    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
    
    本部分是指:

  • 等待任务1完成
  • 然后等待任务2完成
  • 然后继续循环
  • 在完成这两项任务之前,不会重新创建任何任务

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

    大概是这样的:

    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
    

    你知道我如何使用get_salt返回值来处理它吗?像maybe:if(task1==“salt”):print('jep its-sure-salt')@User1010最简单的方法是创建全局变量并将salt的值存储在那里
    do_持续
    make在每次循环迭代准备就绪后更新此变量。您知道如何使用get_salt返回值来处理它吗?像maybe:if(task1==“salt”):print('jep its-sure-salt')@User1010最简单的方法是创建全局变量并将salt的值存储在那里
    do_持续
    make在每次循环迭代准备就绪后更新此变量。