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()