对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实现ping的方法
Jul 06 Python
Python中对元组和列表按条件进行排序的方法示例
Nov 10 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
Jul 08 Python
Python编程实现及时获取新邮件的方法示例
Aug 10 Python
python安装教程
Feb 28 Python
Python中将dataframe转换为字典的实例
Apr 13 Python
python实现图片批量压缩程序
Jul 23 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
Mar 10 Python
python中怎么表示空值
Jun 19 Python
Python实时监控网站浏览记录实现过程详解
Jul 14 Python
Python性能分析工具py-spy原理用法解析
Jul 27 Python
Python使用pycharm导入pymysql教程
Sep 16 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+mysql扎实个人基本功
2008/03/27 PHP
PHP 编程安全性小结
2010/01/08 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
网页编辑器ckeditor和ckfinder配置步骤分享
2012/05/24 Javascript
js对象的复制继承实例
2015/01/10 Javascript
AngularJS 应用身份认证的技巧总结
2016/11/07 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
jquery实现企业定位式导航效果
2018/01/01 jQuery
Angular使用操作事件指令ng-click传多个参数示例
2018/03/27 Javascript
JS中双击和单击事件冲突的解决方法
2018/04/09 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
2020/11/11 Javascript
django数据库migrate失败的解决方法解析
2018/02/08 Python
Python3字符串encode与decode的讲解
2019/04/02 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
python 环境搭建 及python-3.4.4的下载和安装过程
2019/07/20 Python
深入理解Python 多线程
2020/06/16 Python
pytorch SENet实现案例
2020/06/24 Python
python获取整个网页源码的方法
2020/08/03 Python
详解Anaconda 的安装教程
2020/09/23 Python
利用python+request通过接口实现人员通行记录上传功能
2021/01/13 Python
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
党员大会主持词
2014/04/02 职场文书
高三毕业寄语
2014/04/10 职场文书
团日活动总结范文
2014/04/25 职场文书
商家认证委托书格式
2014/10/16 职场文书
严以用权学习心得体会
2016/01/12 职场文书
高中生物教学反思
2016/02/20 职场文书
Mysql Show Profile
2021/04/05 MySQL
pytorch 如何使用batch训练lstm网络
2021/05/28 Python