对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中__call__方法示例分析
Oct 11 Python
Python Web框架Tornado运行和部署
Oct 19 Python
Python基于多线程操作数据库相关问题分析
Jul 11 Python
python使用webdriver爬取微信公众号
Aug 31 Python
使用python对文件中的单词进行提取的方法示例
Dec 21 Python
Pandas之ReIndex重新索引的实现
Jun 25 Python
django框架ModelForm组件用法详解
Dec 11 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
Jun 08 Python
Pycharm 2020.1 版配置优化的详细教程
Aug 07 Python
django数据模型中null和blank的区别说明
Sep 02 Python
几款Python编译器比较与推荐(小结)
Oct 15 Python
python 利用百度API识别图片文字(多线程版)
Dec 14 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与SQL注入攻击[一]
2007/04/17 PHP
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
2013/01/11 PHP
PHP实现的简单AES加密解密算法实例
2017/05/29 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
2019/05/27 PHP
js批量设置样式的三种方法不推荐使用with
2013/02/25 Javascript
js文件缓存之版本管理详解
2013/07/05 Javascript
js如何取消事件冒泡
2013/09/23 Javascript
jquery动态更换设置背景图的方法
2014/03/25 Javascript
jQuery固定浮动侧边栏实现思路及代码
2014/09/28 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(三)
2016/09/14 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
原生js中ajax访问的实例详解
2017/09/19 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
利用jqprint插件打印页面内容的实现方法
2018/01/09 Javascript
浅谈layui分页控件field参数接收对象的问题
2019/09/20 Javascript
JS前端模块化原理与实现方法详解
2020/03/17 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
2020/08/04 Javascript
[17:36]VG战队纪录片
2014/08/21 DOTA
[53:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第三场 6.2
2018/06/03 DOTA
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
Python开发网站目录扫描器的实现
2019/02/21 Python
python进阶之自定义可迭代的类
2019/08/20 Python
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
廉价连衣裙和婚纱礼服在线销售:Tbdress
2019/02/28 全球购物
金融专业个人的自我评价
2013/10/18 职场文书
模具设计与制造专业求职信
2014/07/19 职场文书
银行自荐信怎么写
2015/03/05 职场文书
生产车间管理制度
2015/08/04 职场文书
公司人事管理制度
2015/08/05 职场文书
2019运动会广播加油稿汇总
2019/08/21 职场文书
在Windows下安装配置CPU版的PyTorch的方法
2021/04/02 Python
搭建Yolov5服务器
2022/04/30 Servers