[英]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
將“阻塞”的事件時,事件循環再次運行,然后才調度另一個任務。 在幕后,異步功能是協程,調用await
會使事件循環的corouting屈服,在出現等待條件時,它會在稍后的點恢復。
在這里,您永遠不會等待任何事情,因此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對於它所說的內容很有用:異步執行任務,允許其他任務在當前任務等待某事時取得進展。 沒有並行運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.