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 密集型任务或者需要并发的操作。

相关推荐
এ慕ོ冬℘゜32 分钟前
如何在 HTML 中嵌入音频和视频?
前端·html·音视频
2501_944521597 小时前
Ramda 跨端三方库仓颉适配全流程
开发语言·javascript·flutter·php
行思理7 小时前
go语言学习难度及适合学习的人群
开发语言·学习·golang
wangchunyu1149 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
变与不变8069 小时前
jQuery怎么使用
前端·javascript
神膘护体小月半9 小时前
flex 布局的 order 属性
前端·css
paopaokaka_luck9 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
仰望.9 小时前
vue 表格组件 vxe-table 树表格懒加载支持拖拽排序的详细用法
前端·javascript·vue.js·vxe-table
前端 贾公子9 小时前
vite-plugin-uni-manifest 升级指南
前端
小码哥_常10 小时前
iPhone 用户传了张 HEIC,我的前端崩了
前端