对Python中创建进程的两种方式以及进程池详解


Posted in Python onJanuary 14, 2019

在Python中创建进程有两种方式,第一种是:

from multiprocessing import Process
import time
 
def test():
 while True:
  print('---test---')
  time.sleep(1)
 
if __name__ == '__main__':
 p=Process(target=test)
 p.start()
 while True:
  print('---main---')
  time.sleep(1)

上面这段代码是在windows下跑的,通过Process类可以创建一个进程对象,然后p.start()即可开启进程,test函数是你想进程实现的功能。

第二种方式是:

from multiprocessing import Process
import time
 
class MyNewProcess(Process):
 def run(self):
  while True:
   print('---1---')
   time.sleep(1)
 
if __name__=='__mian__':
 p = MyNewProcess()
 # 调用p.start()方法,p会先去父类中寻找start(),然后在Process的start方法中调用run方法
 p.start()
 
 while True:
  print('---Main---')
  time.sleep(1)

这里是第二种创建进程的方式,通过子类继承Process类,子类中必须有run方法,里面实现进程功能,创建子类对象之后,调用对象的start方法。

下面来说一下进程池,就是实现已经创建好的进程

# 进程池
from multiprocessing import Pool
import os
import random
import time
 
def worker(num):
 for i in range(5):
  print('===pid=%d==num=%d='%(os.getpid(),num))
  time.sleep(1)
 
# 3表示进程池中最多有三个进程一起执行
pool=Pool(3)
 
for i in range(10):
 print('---%d---'%i)
 # 向进程中添加任务
 # 注意:如果添加的任务数量超过了进程池中进程的个数的话,那么就不会接着往进程池中添加,如果还没有执行的话,他会等待前面的进程结束,然后在往
 # 进程池中添加新进程
 pool.apply_async(worker,(i,))
 
pool.close() # 关闭进程池
pool.join() # 主进程在这里等待,只有子进程全部结束之后,在会开启主线程

大家可以看到在Pool方法就是创建了一个进程池,3表示创建进程数,通过pool.apply_async( )将子进程添加到进程池中,pool.close( )表示关闭进程池,一定要添加join函数,否则主进程直接崩了,看不到进程池中子进程的现象。

以上这篇对Python中创建进程的两种方式以及进程池详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python结巴中文分词工具使用过程中遇到的问题及解决方法
Apr 15 Python
python使用邻接矩阵构造图代码示例
Nov 10 Python
python timestamp和datetime之间转换详解
Dec 11 Python
Python数据结构之双向链表的定义与使用方法示例
Jan 16 Python
使用python对excle和json互相转换的示例
Oct 23 Python
python将txt文件读入为np.array的方法
Oct 30 Python
Python分布式进程中你会遇到的问题解析
May 28 Python
Python中@property的理解和使用示例
Jun 11 Python
tensorflow 实现打印pb模型的所有节点
Jan 23 Python
Python语法垃圾回收机制原理解析
Mar 25 Python
Python实战之疫苗研发情况可视化
May 18 Python
Python Pandas读取Excel日期数据的异常处理方法
Feb 28 Python
对Python多线程读写文件加锁的实例详解
Jan 14 #Python
Python多进程写入同一文件的方法
Jan 14 #Python
python 将大文件切分为多个小文件的实例
Jan 14 #Python
使用k8s部署Django项目的方法步骤
Jan 14 #Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 #Python
python中使用 xlwt 操作excel的常见方法与问题
Jan 13 #Python
用Python实现大文本文件切割的方法
Jan 12 #Python
You might like
深入了解php4(1)--回到未来
2006/10/09 PHP
php解析http获取的json字符串变量总是空白null
2015/03/02 PHP
php如何连接sql server
2015/10/16 PHP
javascript插入样式实现代码
2012/02/22 Javascript
同域jQuery(跨)iframe操作DOM(实例讲解)
2013/12/19 Javascript
原生JavaScript实现滚动条效果
2020/03/24 Javascript
归纳下js面向对象的几种常见写法总结
2016/08/24 Javascript
Angular2安装angular-cli
2017/05/21 Javascript
10个最优秀的Node.js MVC框架
2017/08/24 Javascript
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
微信小程序实现动态改变view标签宽度和高度的方法【附demo源码下载】
2017/12/05 Javascript
微信小程序 scroll-view实现锚点滑动的示例
2017/12/06 Javascript
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
2018/03/10 Javascript
javascript原型链学习记录之继承实现方式分析
2019/05/01 Javascript
分享8个JavaScript库可更好地处理本地存储
2020/10/12 Javascript
[03:39]这就是刀塔,我们是冠军!燃情短片讲述我们的DOTA故事
2019/07/02 DOTA
Python 初始化多维数组代码
2008/09/06 Python
python利用beautifulSoup实现爬虫
2014/09/29 Python
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
Python输入二维数组方法
2018/04/13 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
对python mayavi三维绘图的实现详解
2019/01/08 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
Python tcp传输代码实例解析
2020/03/18 Python
最好的商品表达自己:Cafepress
2019/09/04 全球购物
办公室人员先进事迹
2014/01/27 职场文书
学校招生宣传广告词
2014/03/19 职场文书
教师党员公开承诺书
2014/03/25 职场文书
电子信息工程自荐信
2014/05/26 职场文书
2014预备党员党课学习心得范文
2014/07/08 职场文书
科级干部群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
入党积极分子党小组意见
2015/06/02 职场文书
JavaScript原型链详解
2021/11/07 Javascript