对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 用户登录验证的小例子
Mar 06 Python
Python使用MONGODB入门实例
May 11 Python
python更新列表的方法
Jul 28 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
May 03 Python
Python 实现在文件中的每一行添加一个逗号
Apr 29 Python
Python 中的Selenium异常处理实例代码
May 03 Python
Python import与from import使用及区别介绍
Sep 06 Python
pycharm运行程序时在Python console窗口中运行的方法
Dec 03 Python
python 使用递归回溯完美解决八皇后的问题
Feb 26 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
Apr 29 Python
Python Socket多线程并发原理及实现
Dec 11 Python
浅谈pytorch中的dropout的概率p
May 27 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
PHP中foreach循环中使用引用要注意的地方
2011/01/02 PHP
PHP不用第三变量交换2个变量的值的解决方法
2013/06/02 PHP
php二分查找二种实现示例
2014/03/12 PHP
php获取文章上一页与下一页的方法
2014/12/01 PHP
非常好的js代码
2006/06/27 Javascript
jQuery TextBox自动完成条
2009/07/22 Javascript
cloudgamer出品ImageZoom 图片放大效果
2010/04/01 Javascript
js使用for循环与innerHTML获取选中tr下td值
2014/09/26 Javascript
基于jquery实现发送文章到手机的代码
2014/12/26 Javascript
jquery实现鼠标滑过显示二级下拉菜单效果
2015/08/24 Javascript
jquery读写cookie操作实例分析
2015/12/24 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
easyUI实现(alert)提示框自动关闭的实例代码
2016/11/07 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
2017/02/07 Javascript
canvas实现刮刮卡效果
2017/03/14 Javascript
element-ui 表格数据时间格式化的方法
2018/08/24 Javascript
JavaScript组合模式---引入案例分析
2020/05/23 Javascript
antd 表格列宽自适应方法以及错误处理操作
2020/10/27 Javascript
Python编程之多态用法实例详解
2015/05/19 Python
使用python绘制常用的图表
2016/08/27 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
对pandas进行数据预处理的实例讲解
2018/04/20 Python
python实现超简单的视频对象提取功能
2018/06/04 Python
Python实现处理逆波兰表达式示例
2018/07/30 Python
python如何建立全零数组
2020/07/19 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
保加利亚运动鞋购物网站:SneakerStudio.bg
2020/12/23 全球购物
应届生骨科医生求职信
2013/10/31 职场文书
酒吧总经理岗位职责
2013/12/10 职场文书
服务口号大全
2014/06/11 职场文书
高中综合实践活动总结
2014/07/07 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书