python joblib多进程执行任务

Joblib是一个可以简单地将Python代码转换为并行计算模式的软件包,它可非常简单并行我们的程序,从而提高计算速度。

Joblib是一组用于在Python中提供轻量级流水线的工具。 它具有以下功能:

透明的磁盘缓存功能和“懒惰”执行模式,简单的并行计算
Joblib对numpy大型数组进行了特定的优化,简单,快速。

from joblib import Parallel, delayed

def func(param1, param2):
	return param1 + param2
	
res_list = Parallel(n_jobs=job_num)(delayed(func)(param1, param2) for param1 in param1_list)

解释

使用joblib库的Parallel,delayed。其中n_jobs代表并行的进程数,一般不超过设备CPU的个数,func是执行的子函数,传入的参数param1可以来自一个参数list或者任何可迭代对象,也可以传入固定的参数例如param2。
函数的返回值按照遍历的参数list的顺序依次以列表的形式返回到reslist中。

其他

joblib还具有快速磁盘缓存和快速压缩的功能。使用joblib.dump和joblib.load可以提高大数据的读取和存储效率。

在PyQt中使用joblib进行多进程和进程间通信的方法如下[^1]: 1. 导入所需的模块: ```python from PyQt5.QtCore import QProcess, QSharedMemory, QBuffer, QIODevice from PyQt5.QtGui import QImage, QPixmap from PyQt5.QtWidgets import QApplication from joblib import Parallel, delayed ``` 2. 创建一个自定义的类,继承自QProcess,并重写其run()方法: ```python class MyProcess(QProcess): def __init__(self, parent=None): super().__init__(parent) self.shared_memory = QSharedMemory() self.buffer = QBuffer() self.image = QImage() def run(self): # 在子进程中执行的代码 # 进程间通信的方式可以使用共享内存、管道等 # 这里以共享内存为例 self.shared_memory.setKey("image") self.shared_memory.attach() self.buffer.open(QIODevice.ReadWrite) self.buffer.setData(self.shared_memory.constData()) self.image.loadFromData(self.buffer.data()) self.buffer.close() self.shared_memory.detach() ``` 3. 在主进程中创建一个QApplication实例,并使用Parallel函数创建多个子进程: ```python app = QApplication([]) processes = Parallel(n_jobs=-1)(delayed(run_process)() for _ in range(4)) ``` 4. 在子进程中执行任务,并将结果存储到共享内存中: ```python def run_process(): # 执行任务的代码 # 这里以处理图像为例 image = QImage("input.jpg") shared_memory = QSharedMemory() buffer = QBuffer() buffer.open(QIODevice.ReadWrite) image.save(buffer, "JPG") shared_memory.setKey("image") shared_memory.create(buffer.size()) shared_memory.lock() shared_memory.data().data().cast("char").move(0, buffer.data().size(), buffer.data().data()) shared_memory.unlock() buffer.close() process = MyProcess() process.start() process.waitForFinished() ``` 通过以上步骤,你可以在PyQt中使用joblib进行多进程和进程间通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值