Python asyncio 有两个任务,只有一个是 运行
Python asyncio two tasks and only one is running
我是 python 的新手,很难理解为什么我的协程无法正常工作。
在当前的代码中,只有一个工作是运行,另一个总是闲置。为什么?
class Worker:
def job1_sync(self):
count = 0
while True:
print('JOB A:', count)
count = count + 1
def job2_sync(self):
count = 0
while True:
print('JOB B:', count)
count = count + 1
async def job1(self):
await self.job1_sync()
async def job2(self):
await self.job2_sync()
worker = Worker()
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(asyncio.gather(worker.job1(), worker.job2()))
Asyncio 不执行多任务或多线程。它的作用是使用协作模型在一个线程内安排任务。
也就是说,事件循环会在当前任务 await
会 "block" 时再次运行,然后才会安排另一个任务。在幕后,异步函数是协程,调用 await
使协程屈服于事件循环,事件循环稍后会在等待条件出现时恢复。
在这里你永远不会等待任何事情,所以 job1 永远不会放弃控制,所以事件循环永远没有机会将计算能力分配给其他任务。
现在,如果您的工作是真正放弃控制权,比如通过触发延迟,那么您的代码将起作用:
async def job1_sync(self): # note the async : only async functions can await
count = 0
while True:
print('JOB A:', count)
count = count + 1
await asyncio.sleep(1) # main even loop gets control
TLDR:asyncio 就如它所说的那样有用:异步做事,允许其他任务在当前任务等待某事时取得进展。没有什么是并行运行的。
我是 python 的新手,很难理解为什么我的协程无法正常工作。
在当前的代码中,只有一个工作是运行,另一个总是闲置。为什么?
class Worker:
def job1_sync(self):
count = 0
while True:
print('JOB A:', count)
count = count + 1
def job2_sync(self):
count = 0
while True:
print('JOB B:', count)
count = count + 1
async def job1(self):
await self.job1_sync()
async def job2(self):
await self.job2_sync()
worker = Worker()
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(asyncio.gather(worker.job1(), worker.job2()))
Asyncio 不执行多任务或多线程。它的作用是使用协作模型在一个线程内安排任务。
也就是说,事件循环会在当前任务 await
会 "block" 时再次运行,然后才会安排另一个任务。在幕后,异步函数是协程,调用 await
使协程屈服于事件循环,事件循环稍后会在等待条件出现时恢复。
在这里你永远不会等待任何事情,所以 job1 永远不会放弃控制,所以事件循环永远没有机会将计算能力分配给其他任务。
现在,如果您的工作是真正放弃控制权,比如通过触发延迟,那么您的代码将起作用:
async def job1_sync(self): # note the async : only async functions can await
count = 0
while True:
print('JOB A:', count)
count = count + 1
await asyncio.sleep(1) # main even loop gets control
TLDR:asyncio 就如它所说的那样有用:异步做事,允许其他任务在当前任务等待某事时取得进展。没有什么是并行运行的。