对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的Urllib库的基本使用教程
Apr 30 Python
Python多线程、异步+多进程爬虫实现代码
Feb 17 Python
插入排序_Python与PHP的实现版(推荐)
May 11 Python
利用python解决mysql视图导入导出依赖的问题
Dec 17 Python
Python实现生成随机数据插入mysql数据库的方法
Dec 25 Python
基于python 爬虫爬到含空格的url的处理方法
May 11 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
Jun 17 Python
python celery分布式任务队列的使用详解
Jul 08 Python
解决使用export_graphviz可视化树报错的问题
Aug 09 Python
Python多重继承之菱形继承的实例详解
Feb 12 Python
Python Django中的STATIC_URL 设置和使用方式
Mar 27 Python
Python 绘制可视化折线图
Jul 22 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
世界上第一台立体声收音机
2021/03/01 无线电
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
php常用数组函数实例小结
2016/12/29 PHP
js 巧妙去除数组中的重复项
2010/01/25 Javascript
nodejs中使用monk访问mongodb
2014/07/06 NodeJs
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
JavaScript jquery及AJAX小结
2016/01/24 Javascript
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
vue购物车插件编写代码
2017/11/27 Javascript
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
layui字体图标 loading图标静止不旋转的解决方法
2019/09/23 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
[52:05]EG vs OG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
zbar解码二维码和条形码示例
2014/02/07 Python
Python和php通信乱码问题解决方法
2014/04/15 Python
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
使用python制作一个解压缩软件
2019/11/13 Python
Python标准库shutil模块使用方法解析
2020/03/10 Python
用python查找统一局域网下ip对应的mac地址
2021/01/13 Python
html5嵌入内容_动力节点Java学院整理
2017/07/07 HTML / CSS
欧洲高端品牌直销店:Fashionesta
2016/08/31 全球购物
德国化妆品和天然化妆品网上商店:kosmetikfuchs.de
2017/06/09 全球购物
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
亚马逊新加坡官方网站:Amazon.sg
2020/03/25 全球购物
工程师岗位职责
2013/11/08 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
关爱空巢老人感想
2015/08/11 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
python tkinter模块的简单使用
2021/04/07 Python