对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之画圈还不简单吗?
Sep 20 Python
Python中的getopt函数使用详解
Jul 28 Python
Python按行读取文件的简单实现方法
Jun 22 Python
json跨域调用python的方法详解
Jan 11 Python
200行自定义python异步非阻塞Web框架
Mar 15 Python
python enumerate函数的使用方法总结
Nov 15 Python
python 读取目录下csv文件并绘制曲线v111的方法
Jul 06 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
Nov 30 Python
Django Session和Cookie分别实现记住用户登录状态操作
Jul 02 Python
将不规则的Python多维数组拉平到一维的方法实现
Jan 11 Python
python用700行代码实现http客户端
Jan 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导出生成word的方法
2015/12/25 PHP
php blowfish加密解密算法
2016/07/02 PHP
一段效率很高的for循环语句使用方法
2007/08/13 Javascript
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
JavaScrip常见的一些算法总结
2015/12/28 Javascript
让DIV的滚动条自动滚动到最底部的3种方法(推荐)
2016/09/24 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
2016/12/11 Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
2018/01/25 Javascript
mui框架 页面无法滚动的解决方法(推荐)
2018/01/25 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
vue-router重定向和路由别名的使用讲解
2019/01/19 Javascript
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
javascript实现简易计算器功能
2020/09/23 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2017/03/11 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
2019/12/26 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
2020/03/06 Python
Linux安装Python3如何和系统自带的Python2并存
2020/07/23 Python
python 判断一组数据是否符合正态分布
2020/09/23 Python
python 多线程中join()的作用
2020/10/29 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
印尼购物网站:iLOTTE
2019/10/16 全球购物
Android interview questions
2016/12/25 面试题
黄河的主人教学反思
2014/02/07 职场文书
水电工岗位职责
2014/02/12 职场文书
美术课外活动总结
2014/07/08 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
2014年职称评定工作总结
2014/11/26 职场文书
学习心得体会
2019/06/20 职场文书
Java基础-封装和继承
2021/07/02 Java/Android