前言
multiprocessing — 基于进程的并行。弄懂了多线程,对于多进程也就比较好理解了。现在市场上个人PC、公司服务器都是多核,多CPU机器,充分利用CPU的计算能力,常用多进程实现并行。
多进程详情API 中文手册已经讲解得比较详细:https://docs.python.org/zh-cn/3/library/multiprocessing.html#
一、multiprocessing 是什么?
multiprocessing 是一个支持使用与 threading 模块类似的 API 来产生进程的包。 multiprocessing 包同时提供了本地和远程并发操作,通过使用子进程而非线程有效地绕过了 全局解释器锁。 因此,multiprocessing 模块允许程序员充分利用给定机器上的多个处理器。 它在 Unix 和 Windows 上均可运行。
multiprocessing 模块还引入了在 threading 模块中没有的API。一个主要的例子就是 Pool 对象,它提供了一种快捷的方法,赋予函数并行化处理一系列输入值的能力,可以将输入数据分配给不同进程处理(数据并行)。下面的例子演示了在模块中定义此类函数的常见做法,以便子进程可以成功导入该模块。
二、使用步骤
1. 多进程模块概念图
2. 多进程初级代码示例
简单的创建多进程的方法,和线程一模一样。
# -*- coding:utf-8 -*-
'''该文件 学习多进程, 多进程类比多线程进行学习, 重点关注如下几个问题
1、 怎么启动多进程?
2、 多进程之间如何通信?
3、多进程之间如何同步?
4、多进程之间如何共享?
5、多进程如何管理?
'''
from multiprocessing import Process
import os, time
def info(title):
'''获取进程一些信息'''
print(title)
print('module name:', __name__)
print('parent process:', os.getppid())
print('process id:', os.getpid())
def add(num):
info('add process')
count = 0
for i in range(num):
print('add %d' %i)
count += num
print(count)
def multi(num):
info('mulit process')
count = 10
for i in range(1, num):
print('multi %d' %i)
count = count*i
# print("current %d" %count)
print(count)
if __name__=="__main__":
print('main process start ...'+'*'*100)
info('main process')
p_add = Process(target=add, args=(10,))
p_mulit = Process(target=multi, args=(59,))
p_list = []
p_list.append(p_add)
p_list.append(p_mulit)
for p in p_list:
p.start()
for p in p_list:
p.join()
print('main process end ...'+'*'*100)
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。