Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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中的并发循环_Python 3.x_Concurrency_Python Asyncio_Event Loop - Fatal编程技术网

Python 3.x python中的并发循环

Python 3.x python中的并发循环,python-3.x,concurrency,python-asyncio,event-loop,Python 3.x,Concurrency,Python Asyncio,Event Loop,我的场景:-开始,等待,开始,停止或杀死 开始第一个事件&等待一段时间 如果达到等待时间,我需要启动第二个事件并返回两个事件结果 但是,如果第一个事件在等待时间之前完成 无需启动第二个事件 返回第一个事件结果 例:- 变量loop和loop2将获得相同的(主)事件循环,这就是为什么它始终保持运行的原因。我的做法如下: 导入异步IO async def async_main(): 结果=无 异步定义某些任务(): 打印(‘io开始’) 等待异步睡眠(6) 打印(‘io结束’) result=“你好

我的场景:-开始,等待,开始,停止或杀死

  • 开始第一个事件&等待一段时间
  • 如果达到等待时间,我需要启动第二个事件并返回两个事件结果
  • 但是,如果第一个事件在等待时间之前完成
  • 无需启动第二个事件
  • 返回第一个事件结果
  • 例:-


    变量
    loop
    loop2
    将获得相同的(主)事件循环,这就是为什么它始终保持运行的原因。我的做法如下:

    导入异步IO
    async def async_main():
    结果=无
    异步定义某些任务():
    打印(‘io开始’)
    等待异步睡眠(6)
    打印(‘io结束’)
    result=“你好”
    返回结果
    异步def回调():
    等待异步睡眠(4)
    如果结果为无:
    打印(‘做其他事情’)
    等待=等待异步IO.gather(
    asyncio.create_任务(some_task()),
    asyncio.create_任务(callback()),
    )
    等待返回
    运行(async\u main())
    
    Asyncio可能会非常混乱,我不建议非专家使用它,因此这里有一种替代方法,使用
    线程
    ,而不是
    Asyncio

    导入线程
    导入时间
    def do_任务():
    结果=无
    定义一些任务():
    非局部结果
    打印(‘io开始’)
    时间。睡眠(2)
    打印(‘io结束’)
    result=“你好”
    def callback():
    时间。睡眠(4)
    如果结果为无:
    打印(‘做其他事情’)
    threading.Thread(target=some_task.start())
    threading.Thread(target=callback).start()
    do_任务()
    
    import asyncio
    
    async def some_task():
        print('io start')
        await asyncio.sleep(2)
        print('io end')
        return "hello"
    
    async def callback(loop):
        await asyncio.sleep(4)
        if loop.is_running():
            print('doing other things')
    
    if __name__ == "__main__":
        loop = asyncio.get_event_loop()
        loop2 = asyncio.get_event_loop()
        a = loop.create_task(some_task())
        b = loop2.create_task(callback(loop))
        result = loop.run_until_complete(a)
        loop2.run_until_complete(b)
        loop.close()
        loop2.close()