对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解决鸡兔同笼问题的方法
Dec 20 Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 Python
python文件特定行插入和替换实例详解
Jul 12 Python
Python实现两个list求交集,并集,差集的方法示例
Aug 02 Python
Python File(文件) 方法整理
Feb 18 Python
python操作日志的封装方法(两种方法)
May 23 Python
postman模拟访问具有Session的post请求方法
Jul 15 Python
python字符串切割:str.split()与re.split()的对比分析
Jul 16 Python
tensorflow2.0的函数签名与图结构(推荐)
Apr 28 Python
python 操作mysql数据中fetchone()和fetchall()方式
May 15 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
Nov 18 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
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商品对比功能代码分享
2015/09/24 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
如果文字过长,则将过长的部分变成省略号显示
2006/06/26 Javascript
Javascript实例教程(19) 使用HoTMetal(7)
2006/12/23 Javascript
转一个日期输入控件,支持FF
2007/04/27 Javascript
番茄的表单验证类代码修改版
2008/07/18 Javascript
jQuery实现切换页面布局使用介绍
2011/10/09 Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
2014/12/18 Javascript
jQuery动态加载css文件实现方法
2016/06/15 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
详解Vue-Cli 异步加载数据的一些注意点
2017/08/12 Javascript
原生JS实现的放大镜特效示例【测试可用】
2018/12/08 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
jQuery实现计算器功能
2020/10/19 jQuery
Python中文分词实现方法(安装pymmseg)
2016/06/14 Python
PyQt5实现拖放功能
2018/04/25 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
pyqt5移动鼠标显示坐标的方法
2019/06/21 Python
Python高并发和多线程有什么关系
2020/11/14 Python
python爬取天气数据的实例详解
2020/11/20 Python
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
How TDD works
2012/09/30 面试题
编辑硕士自荐信范文
2013/11/27 职场文书
内衣营销方案
2014/03/15 职场文书
2014年学雷锋活动总结
2014/06/26 职场文书
离婚财产分隔协议书
2014/10/23 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书
HAM-2000摩机图
2021/04/22 无线电
php修改word的实例方法
2021/11/17 PHP
星际争霸 Light vs Action 一场把教主看到鬼畜的比赛
2022/04/01 星际争霸
MySQL创建管理子分区
2022/04/13 MySQL
Python Matplotlib绘制两个Y轴图像
2022/04/13 Python
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
2022/09/23 Servers