Multiprocessing 模块多进程
multiprocessing --- 基于进程的并行 — Python 3.10.0 文档
引入
from multiprocessing import Process
方法
.run() 表示进程活动的方法。
.start() 启动进程活动
.join([timeout]) 如果可选参数 timeout 是 None (默认值),则该方法将阻塞,直到调用 join() 方法的进程终止。一个进程可以被 join 多次。进程无法join自身,因为这会导致死锁
Name 进程的名称。该名称是一个字符串,仅用于识别目的
is_alive() 返回进程是否还活着。
Daemon 进程的守护标志,一个布尔值。这必须在 start() 被调用之前设置
Pid 返回进程ID。
Exitcode 子进程的退出代码
Authkey 进程的身份验证密钥(字节字符串)。当 multiprocessing 初始化时,主进程使用 os.urandom() 分配一个随机字符串。当创建 Process 对象时,它将继承其父进程的身份验证密钥,尽管可以通过将 authkey 设置为另一个字节字符串来更改
Sentinel 系统对象的数字句柄,当进程结束时将变为 "ready"
terminate() 终止进程。 在Unix上,这是使用 SIGTERM 信号完成的;在Windows上使用 TerminateProcess() 。
kill() 与 terminate() 相同,但在Unix上使用 SIGKILL 信号
close() 关闭 Process 对象,释放与之关联的所有资源。如果底层进程仍在运行,则会引发 ValueError 。一旦 close() 成功返回, Process 对象的大多数其他方法和属性将引发 ValueError 。
异常
multiprocessing.ProcessError 所有 multiprocessing 异常的基类
multiprocessing.AuthenticationError 出现身份验证错误时引发。
multiprocessing.TimeoutError 有超时的方法超时时引发
multiprocessing.BufferTooShort 当提供的缓冲区对象太小而无法读取消息时, Connection.recv_bytes_into() 引发的异常
其他
multiprocessing.cpu_count() 返回系统的CPU数量
multiprocessing.active_children() 返回当前进程存活的子进程的列表
进程池 pool
引入
from multiprocessing import Pool
方法
apply(func[, args[, kwds]]) 使用 args 参数以及 kwds 命名参数调用 func , 它会返回结果前阻塞。这种情况下,apply_async() 更适合并行化工作。另外 func 只会在一个进程池中的一个工作进程中执行。
apply_async(func[, args[, kwds[, callback[, error_callback]]]]) apply() 方法的一个变种,返回一个 AsyncResult 对象。
map(func, iterable[, chunksize]) 内置 map() 函数的并行版本 (但它只支持一个 iterable 参数,对于多个可迭代对象请参阅 starmap())。 它会保持阻塞直到获得结果。对于很长的迭代对象,可能消耗很多内存。可以考虑使用 imap() 或 imap_unordered() 并且显示指定 chunksize 以提升效率。
map_async(func, iterable[, chunksize[, callback[, error_callback]]]) map() 方法的一个变种,返回一个 AsyncResult 对象。
imap(func, iterable[, chunksize]) map() 的延迟执行版本。
imap_unordered(func, iterable[, chunksize]) 和 imap() 相同,只不过通过迭代器返回的结果是任意的。
close() 阻止后续任务提交到进程池,当所有任务执行完成后,工作进程会退出。
terminate() 不必等待未完成的任务,立即停止工作进程。当进程池对象被垃圾回收时,会立即调用 terminate()。
join() 等待工作进程结束。调用 join() 前必须先调用 close() 或者 terminate() 。
get([timeout]) 用于获取执行结果。
wait([timeout]) 阻塞,直到返回结果,或者 timeout 秒后超时。
ready() 返回执行状态,是否已经完成。
successful() 判断调用是否已经完成并且未引发异常。