协程

最后发布时间:2025-06-30 17:52:18 浏览量:
import asyncio
import time
import threading
def blocking_task():
    print(f"开始阻塞任务,线程: {threading.current_thread().name}")
    time.sleep(2)
    print("阻塞任务完成")
async def main():
    print(f"主事件循环线程: {threading.current_thread().name}")
    await asyncio.to_thread(blocking_task)
    print("阻塞任务await结束,继续事件循环")

asyncio.run(main())
主事件循环线程: MainThread
开始阻塞任务,线程: ThreadPoolExecutor-0_0
阻塞任务完成
阻塞任务await结束,继续事件循环
import asyncio
import time
import threading

def blocking_task(i):
    print(f"开始阻塞任务{i},线程: {threading.current_thread().name}")
    time.sleep(2)
    print(f"阻塞任务{i}完成")

async def main():
    print(f"主事件循环线程: {threading.current_thread().name}")
    tasks = [blocking_task(i) for i in range(3)]    
    print("所有阻塞任务完成,继续事件循环")
asyncio.run(main())

主事件循环线程: MainThread
开始阻塞任务0,线程: MainThread
阻塞任务0完成
开始阻塞任务1,线程: MainThread
阻塞任务1完成
开始阻塞任务2,线程: MainThread
阻塞任务2完成
所有阻塞任务完成,继续事件循环
import asyncio
import time
import threading

def blocking_task(i):
    print(f"开始阻塞任务{i},线程: {threading.current_thread().name}")
    time.sleep(2)
    print(f"阻塞任务{i}完成")

async def main():
    print(f"主事件循环线程: {threading.current_thread().name}")
    
    # 并发启动3个阻塞任务
    tasks = [asyncio.to_thread(blocking_task, i) for i in range(3)]

    # 等待所有任务完成
    await asyncio.gather(*tasks)
    
    print("所有阻塞任务完成,继续事件循环")

asyncio.run(main())

主事件循环线程: MainThread
开始阻塞任务0,线程: asyncio_0
开始阻塞任务1,线程: asyncio_1
开始阻塞任务2,线程: asyncio_2
阻塞任务0完成
阻塞任务1完成
阻塞任务2完成
所有阻塞任务完成,继续事件循环
Python asyncio:
[Event Loop Thread]
   |---> Coroutine A (running)
   |---> Coroutine B (waiting for IO)
   |---> Coroutine C (running)

Python threading:
[Thread1]  [Thread2]  [Thread3]  (OS schedules these threads, but only one can hold GIL)

Java threading:
[Thread1]  [Thread2]  [Thread3]  (OS schedules real parallel threads on multiple CPU cores)

快捷入口
Python 思维导图 浏览PDF 下载PDF
分享到:
标签