python多线程开发

python 复制代码
import asyncio
from concurrent.futures import ThreadPoolExecutor

class WorkJob:
    async def run(self):
        await asyncio.gather(
            self.function1(),
            self.function2(),
        )

async def run_in_thread(job):
    loop = asyncio.get_event_loop()
    with ThreadPoolExecutor() as executor:
        await loop.run_in_executor(executor, job.run)

async def main():
    jobs = [WorkJob(), WorkJob()]  # Add more jobs as needed
    await asyncio.gather(
        *[run_in_thread(job) for job in jobs]
    )

# Running the event loop
if __name__ == "__main__":
    asyncio.run(main())

以上是一个实现多线程并行工作的代码。具体来说,ThreadPoolExecutor 允许多个线程并行运行任务,而 asyncio 的 run_in_executor 函数会将异步任务 offload 到线程池中的线程执行。因此,多个 WorkJob().run() 实例会被分配到不同的线程并行运行。

代码解析:

  1. ThreadPoolExecutor 创建了一个线程池
  2. loop.run_in_executor 将 WorkJob().run() 的执行 offload 到线程池,从而并行运行。
  3. asyncio.gather 确保多个任务能够同时被调度。

在这种方式下,不同线程可以独立工作,因此可以更有效地处理 I/O 密集型任务或者需要并发的操作。

相关推荐
lie..7 分钟前
30天从零开始学AI应用开发(Day 19):项目二完结:RAG 知识库问答系统,把自己攒的资料变成私人顾问
开发语言·人工智能·python
SWAGGY..11 分钟前
【C++进阶】:(7)红黑树的原理与 C++ 实现:结构设计、插入调整及性质验证
android·java·开发语言·c++·算法
颜进强13 分钟前
18 · NestJS动态模块与 forRoot:`imports: [ConfigModule.forRoot({...})]` 到底在 import 什么
前端·后端·ai编程
(Charon)20 分钟前
【C++面试】堆内存与栈内存:string、vector和对象到底存在哪里
开发语言·c++·面试
YZ12255224 分钟前
【Docker专题】使用Docker部署Vue-Flask项目前后端分离版【前端Docker部署】
前端·vue.js·docker
liangshanbo121527 分钟前
浏览器渲染过程:高级前端面试题
前端
谢亮_vipxieliang29 分钟前
Go defer、panic与recover核心知识点
开发语言·后端·golang
太子釢30 分钟前
React 函数组件与 Hook 实践指南
前端·react.js
颜进强38 分钟前
17 · 自定义 Provider 四形态:useValue / useClass / useFactory / useExisting 到底在选什么
前端·后端·ai编程