我正在尝试在不相互阻塞的单独线程中运行两个函数。每个线程包含一个循环。
以下代码的输出:
%reset -f
import asyncio
import time
async def run1():
for i in range(0 , 3) :
print('run1')
time.sleep(1)
async def run2():
for i in range(0 , 3) :
print('run2')
time.sleep(2)
async def main():
results = await asyncio.gather(
run1() , run2())
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(main())
是:
run2
run2
run2
run1
run1
run1
但是也可以是
run1
run1
run1
run2
run2
run2
因此看来,一旦线程run1
或run2
中的一个线程阻塞了另一个启动线程,直到当前运行完成。
我期望输出类似于:
run1
run1
run2
run2
run1
run2
如何允许线程run1
和run2
互不阻塞?
我正在使用Python3。
答案 0 :(得分:1)
将time.sleep
更改为相应的异步版本:
await asyncio.sleep(1)
您的代码的正确结果是:
run1
run2
run1
run2
run1
run2
因为print
发生在sleep
之前。