对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的闭包和装饰器
Feb 26 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
Sep 19 Python
python将unicode转为str的方法
Jun 21 Python
Python程序退出方式小结
Dec 09 Python
Python+matplotlib+numpy绘制精美的条形统计图
Jan 02 Python
Python语言描述随机梯度下降法
Jan 04 Python
Python实现的个人所得税计算器示例
Jun 01 Python
PyCharm下载和安装详细步骤
Dec 17 Python
python IDLE添加行号显示教程
Apr 25 Python
为什么python比较流行
Jun 19 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
Nov 20 Python
Python OpenGL基本配置方式
May 20 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
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
php eval函数一句话木马代码
2015/05/21 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
基于JQUERY的多级联动代码
2012/01/24 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
js轮盘抽奖实例分析
2020/04/17 Javascript
webpack入门必知必会
2017/01/16 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
原生js实现轮播图的示例代码
2017/02/20 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
express+vue+mongodb+session 实现注册登录功能
2018/12/06 Javascript
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
Python内置函数的用法实例教程
2014/09/08 Python
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
使用PDB模式调试Python程序介绍
2015/04/05 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
使用layui实现左侧菜单栏及动态操作tab项的方法
2020/11/10 HTML / CSS
美国珠宝店:Helzberg Diamonds
2018/10/24 全球购物
德国的大型美妆个护电商:Flaconi
2020/06/26 全球购物
网络安全类面试题
2015/08/01 面试题
农民工工资支付承诺函
2014/03/31 职场文书
小学新学期寄语
2014/04/02 职场文书
导游词之唐山景点
2019/12/18 职场文书
MySql开发之自动同步表结构
2021/05/28 MySQL
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
2021/06/07 Python