对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中使用正则表达式的方法
Aug 13 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
Apr 17 Python
Mac中Python 3环境下安装scrapy的方法教程
Oct 26 Python
Python多线程threading和multiprocessing模块实例解析
Jan 29 Python
浅谈python编译pyc工程--导包问题解决
Mar 20 Python
python数据预处理之数据标准化的几种处理方式
Jul 17 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
Aug 15 Python
python str字符串转uuid实例
Mar 03 Python
PyCharm永久激活方式(推荐)
Sep 22 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
Jun 10 Python
python 19个值得学习的编程技巧
Aug 15 Python
Python集合的基础操作
Nov 01 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
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
php判断输入不超过mysql的varchar字段的长度范围
2011/06/24 PHP
php object转数组示例
2014/01/15 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
获取网站跟路径的javascript代码(站点及虚拟目录)
2009/10/20 Javascript
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
2014/06/06 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
jquery动态切换背景图片的简单实现方法
2016/05/14 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
jQuery实现参数自定义的文字跑马灯效果
2018/08/15 jQuery
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
微信小程序自定义弹窗实现详解(可通用)
2019/07/04 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
python脚本实现分析dns日志并对受访域名排行
2014/09/18 Python
Python字符串切片操作知识详解
2016/03/28 Python
django+js+ajax实现刷新页面的方法
2017/05/22 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
对python制作自己的数据集实例讲解
2018/12/12 Python
python随机数分布random均匀分布实例
2019/11/27 Python
Python Numpy库常见用法入门教程
2020/01/16 Python
使用keras和tensorflow保存为可部署的pb格式
2020/05/25 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
魔幻般冒泡背景的CSS3按钮动画
2016/02/27 HTML / CSS
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
课程设计心得体会
2013/12/28 职场文书
综合实践教学反思
2014/01/31 职场文书
仓管岗位职责范本
2014/02/08 职场文书
出国留学担保书
2014/05/20 职场文书
邀请函范文
2015/02/02 职场文书
护士岗位竞聘书
2015/09/15 职场文书
2019假期福利管理制度!
2019/07/15 职场文书
励志语录:只有自己足够强大,才能不被别人践踏
2020/01/09 职场文书
Django如何与Ajax交互
2021/04/29 Python
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js