对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实现爬虫下载漫画示例
Feb 16 Python
使用Python内置的模块与函数进行不同进制的数的转换
Mar 12 Python
Python爬取三国演义的实现方法
Sep 12 Python
python通过socket实现多个连接并实现ssh功能详解
Nov 08 Python
python去除扩展名的实例讲解
Apr 23 Python
Python构建图像分类识别器的方法
Jan 12 Python
基于python框架Scrapy爬取自己的博客内容过程详解
Aug 05 Python
Python使用APScheduler实现定时任务过程解析
Sep 11 Python
python单向循环链表原理与实现方法示例
Dec 03 Python
scrapy实践之翻页爬取的实现
Jan 05 Python
python批量生成身份证号到Excel的两种方法实例
Jan 14 Python
python中os.remove()用法及注意事项
Jan 31 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以post形式发送xml的方法
2014/11/04 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
2017/05/15 PHP
yii2多图上传组件的使用教程
2018/05/10 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
jQuery + Flex 通过拖拽方式动态改变图片的代码
2011/08/03 Javascript
JS日期加减,日期运算代码
2015/11/05 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
原生js实现jquery函数animate()动画效果的简单实例
2016/08/21 Javascript
H5移动端适配 Flexible方案
2016/10/24 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
vue.js组件之间传递数据的方法
2017/07/10 Javascript
js es6系列教程 - 新的类语法实战选项卡(详解)
2017/09/02 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
新手入门js闭包学习过程解析
2019/10/08 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
Vue循环中多个input绑定指定v-model实例
2020/08/31 Javascript
javascript实现简易计算器功能
2020/09/23 Javascript
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
python如何实现反向迭代
2018/03/20 Python
Python 线性回归分析以及评价指标详解
2020/04/02 Python
Selenium元素定位的30种方式(史上最全)
2020/05/11 Python
python实现自动清理重复文件
2020/08/24 Python
python中的yield from语法快速学习
2020/11/06 Python
铁路个人事迹材料
2014/01/30 职场文书
创建精神文明单位实施方案
2014/03/08 职场文书
2015年党支部公开承诺书
2015/01/22 职场文书
整改通知书
2015/04/20 职场文书
2015年安全员工作总结范文
2015/04/22 职场文书
辩论赛开场白大全(主持人+辩手)
2015/05/29 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
2016优秀大学生个人事迹材料范文
2016/03/01 职场文书
详解PHP用mb_string处理windows中文字符
2021/05/26 PHP
Python实现socket库网络通信套接字
2021/06/04 Python
mysql的单列多值存储实例详解
2022/04/05 MySQL