Python 多进程笔记

tech2022-07-16  174

一. 进程

1. 进程概述

进程就是计算机中程序的一次运行活动(Process),是操作系统的结构基础。

2. 创建进程

from multiprocessing import Process process = Process(target=函数, name=进程名, args=(函数需要的参数,)) process # 是一个进程对象 process.run() # 运行任务, 不启动进程 process.name() # 获取进程名字 process.start() # 运行进程, 执行函数 process.terminate() # 终止进程

当多个进程共同访问|修改一个全局变量的时候,变量在各进程中单独存在

3.自定义进程

自定义进程用来访问自己的方法

继承Process类

重写__init__方法添加自己的属性, 使用super()加载父类属性

super(当前类, self).__init__()

重写run方法, 内容就写在此方法中

4.进程池与阻塞和非阻塞

进程池, 可以指定最大进程数, 当有任务时, 就在进程池中开辟一个进程, 直到进程池满, 当在有任务时, 任务等待进程池中某任务完成在继续

# 进程池 form multiprocessing import Pool pool = Pool(Max) pool.apply() # 阻塞式 pool.apply_async() # 非阻塞式 pool.close() # 停止添加进程 pool.join() # 让主进程让步, 避免主进程死亡,导致子进程死亡 # 非阻塞式: 全部添加到队列中, 主进程立刻返回, 并没有等待其他进程完毕, 但是回调函数时等待任务完成之后才调用 # 阻塞式: 每运行一个添加一个, 上一个完成创建新的线程继续下一个, 线程依然会服用

pool.apply_async(task, args=(i,), callback=callback_print)

​ 函数 参数 回调函数 函数

5.进程间通信

from multiprocessing import Queue q = Queue(5) # 队列, 我理解为一个列表, 只能存五个元素 q.put("A") # 添加一个元素 q.qsize() # 相当于len, 查看长度 q.full(): # 判断队列是否满 q.empty() #判断队列是否是空的 q.put(6, timeout=3) # timeout设置时间, 超时退出 put() 如果queue满了则只能等待, 直到有空位置. # 获取队列的值 q.get(timeout=2) # 取内容 q.put_nowait() # 不阻塞的存储 q.get_nowait() # 不阻塞的取 都会抛出异常 # 用法 # 创建线程的时候当参数传进函数, 一个存, 一个取
最新回复(0)