用一个具体的示例,展示如何使用 ThreadPoolExecutor 和 asyncio 来并行运行多个任务,并输出结果。
代码:
import asyncio
import time
from concurrent.futures import ThreadPoolExecutor
class WorkJob:
    def __init__(self, job_id):
        self.job_id = job_id
    # 模拟一个耗时的任务
    def run(self):
        print(f"Job {self.job_id} started in thread.")
        time.sleep(2)
        return f"Jon {self.job_id} finished"
# 使用run_in_executor将任务放到线程池中执行
async def run_in_thread(job):
    loop = asyncio.get_event_loop()
    with ThreadPoolExecutor() as executor:
        result = await loop.run_in_executor(executor, job.run)
        return result
async def main():
    # 创建多个任务
    jobs = [WorkJob(job_id=i) for i in range(10)]
    # 并行执行所有任务
    results = await asyncio.gather(
      *[run_in_thread(job) for job in jobs]
    )
    # 输出结果
    for result in results:
        print(f"{result}")
if __name__ == "__main__":
    asyncio.run(main())
代码运行流程
- WorkJob类:每个任务都有一个唯一的- job_id,并且在- run()方法中模拟一个耗时的操作(用- time.sleep(2)来模拟任务处理的延迟)。
- run_in_thread函数:通过- run_in_thread把任务交给线程池中的线程并返回结果。
- mian函数:创建了10个- WorkJob,并通过- asyncio.gather并行执行它们,最后收集并输出所有任务的结果。
输出结果示例

 说明:
- 这10个任务会同时启动,在运行中其实可以看到,几乎是同时输出的Job x started in thread.。
- 经过2秒钟的模拟延迟后,任务会陆续完成,输出Jon x finished
相关文章:
python多线程开发



















