对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 27 Python
详解Python的Django框架中的templates设置
May 11 Python
Python对文件操作知识汇总
May 15 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
Mar 04 Python
django 发送手机验证码的示例代码
Apr 25 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
Dec 14 Python
使用python代码进行身份证号校验的实现示例
Nov 21 Python
Python3自定义json逐层解析器代码
May 11 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
Aug 07 Python
python 绘制正态曲线的示例
Sep 24 Python
Python本地及虚拟解释器配置过程解析
Oct 13 Python
python中温度单位转换的实例方法
Dec 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提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
2012/03/27 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
PHP检测一个数组有没有定义的方法步骤
2019/07/20 PHP
5款Javascript颜色选择器
2009/10/25 Javascript
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
js滚动条回到顶部的代码
2011/12/06 Javascript
js、css、img等浏览器缓存问题的2种解决方案
2013/10/23 Javascript
JQuery中ajax方法访问web服务实例
2015/07/18 Javascript
jquery原理以及学习技巧介绍
2015/11/11 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
2017/01/22 Javascript
微信小程序 详解页面跳转与返回并回传数据
2017/02/13 Javascript
浅谈Vue.js中的v-on(事件处理)
2017/09/05 Javascript
NW.js 简介与使用方法
2018/02/01 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
微信小程序简单的canvas裁剪图片功能详解
2019/07/12 Javascript
[41:12]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
Python Flask-web表单使用详解
2017/11/18 Python
快速查询Python文档方法分享
2017/12/27 Python
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
python抖音表白程序源代码
2019/04/07 Python
在PyCharm中实现添加快捷模块
2020/02/12 Python
Django自带用户认证系统使用方法解析
2020/11/12 Python
abstract class和interface有什么区别?
2012/01/03 面试题
UNIX文件类型
2013/08/29 面试题
竞选班长自荐书范文
2014/03/09 职场文书
电大毕业生自我鉴定
2014/04/10 职场文书
大班幼儿评语大全
2014/04/30 职场文书
工地标语大全
2014/06/18 职场文书
教师暑期培训感言
2014/08/15 职场文书
运动会广播稿100字
2014/09/14 职场文书
六年级上册《闻官军收河南河北》的教学设计
2019/11/15 职场文书
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python