当前位置: 首页 > news >正文

多进程(python)

参考: https://www.liaoxuefeng.com/wiki/1016959663602400/1017627212385376
个人封装的python多进程处理类,跑满CPU,优化性能

概念

进程: 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了一个Word进程。

线程:有些进程还不止同时干一件事,比如Word,它可以同时进行打字、拼写检查、打印等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread)。

由于每个进程至少要干一件事,所以,一个进程至少有一个线程。当然,像Word这种复杂的进程可以有多个线程,多个线程可以同时执行,多线程的执行方式和多进程是一样的,也是由操作系统在多个线程之间快速切换,让每个线程都短暂地交替运行,看起来就像同时执行一样。当然,真正地同时执行多线程需要多核CPU才可能实现。

总结一下就是,多任务的实现有3种方式:

多进程模式;
多线程模式;
多进程+多线程模式。

概念小结

线程是最小的执行单元,而进程由至少一个线程组成。如何调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间。
多进程和多线程的程序涉及到同步、数据共享的问题,编写起来更复杂。

多进程(multiprocessing)

from multiprocessing import Poolfrom tqdm import tqdmclass SelfMultiple:def __init__(self, func, process: int, params: list, custom_callback=False, callback=None):print("==>init customized multiple class")self.func = funcself.params = paramsself.process = processself.custom_callback = custom_callbackself.callback = callbackdef run(self):self.pool = Pool(processes=self.process)if self.custom_callback == False:print("==>undefined self callback")pbar = tqdm(total=len(self.params))def update(*a):pbar.update()for param in self.params:result = self.pool.apply_async(self.func, param, callback=update)result.get()else:print("==>defined self callback")print(f"==>executing || {self.func}")for param in self.params:result = self.pool.apply_async(self.func, param, callback=self.callback)result.get()self.pool.close()self.pool.join()

如何调用呢

def add(x, y):print(f"adding || {x} + {y}")return x + yif __name__ == "__main__":params = [(1, 2), (3, 4), (5, 6), (7, 8)]multiple_tool = SelfMultiple(add, process=10, params=params, custom_callback=False)multiple_tool.run()
http://www.lryc.cn/news/45249.html

相关文章:

  • 利用Kali工具进行信息收集(35)
  • 《程序员面试金典(第6版)》 面试题 08.11. 硬币(动态规划,组合问题,C++)
  • 实体商家做抖音运营如何做矩阵?
  • java 双列集合Map 万字详解
  • 【数据结构】二叉树<遍历>
  • linux查看硬件信息
  • 吐血整理,互联网大厂最常见的 1120 道 Java 面试题(带答案)整理
  • RabbitMQ如何避免消息丢失
  • 做算法题的正确姿势(不断更新)
  • p85 CTF夺旗-JAVA考点反编译XXE反序列化
  • FastJson——JSO字符串与对象的相互转化
  • 《程序员面试金典(第6版)》面试题 08.08. 有重复字符串的排列组合(回溯算法,全排列问题)C++
  • k8s API限流——server级别整体限流和客户端限流
  • 在华为做了三年软件测试被裁了,我该怎么办
  • Spring cloud 限流的多种方式
  • Linux命令·top
  • springmvc之系列文章
  • Matlab实现深度学习(附上完整仿真源码)
  • 我的谷歌书签
  • day3 数据库技术考点汇总
  • 学剪辑难吗 如何使用会声会影2023做剪辑视频
  • django学习日记
  • 在线教学视频课程如何防止学员挂机?
  • 【Redis】安装配置
  • ChatGPT批量生成文章-ChatGPT文章生成器
  • Linux命令 ——sed
  • C++常用字符串string方法
  • XML树结构和语法
  • 【Qt】Qt单元测试详解(四):Google Test 断言
  • 句柄和指针的区别