Python3.5多进程原理与用法实例分析


Posted in Python onApril 05, 2019

本文实例讲述了Python3.5多进程原理与用法。分享给大家供大家参考,具体如下:

Python3.5多进程原理与用法实例分析

进程类:Process

Python3.5多进程原理与用法实例分析

示例及代码:

Python3.5多进程原理与用法实例分析

(1)创建函数作为单进程

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
import multiprocessing
import time
#创建函数并将其作为单个进程
def worker(interval):
  n = 5    #进程数
  while n>0:
    print("The time is :{0}".format(time.ctime()))   #初始化时间
    time.sleep(interval)    #睡眠时间
    n-=1
if __name__ == "__main__":
  # 创建进程,target:调用对象,args:传参数到对象
  p = multiprocessing.Process(target=worker,args=(2,))
  p.start()    #开启进程
  print("进程号:",p.pid)
  print("进程别名:",p.name)
  print("进程存活状态:",p.is_alive())

运行结果:

进程号: 6784
进程别名: Process-1
进程存活状态: True
The time is :Wed Nov  1 10:59:03 2017
The time is :Wed Nov  1 10:59:05 2017
The time is :Wed Nov  1 10:59:07 2017
The time is :Wed Nov  1 10:59:09 2017
The time is :Wed Nov  1 10:59:11 2017

(2)创建函数作为多进程

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
import multiprocessing
import time
#创建函数作为多进程
def work1(interval):
  print("work1...")
  time.sleep(interval)
  print("end work1...")
def work2(interval):
  print("work2...")
  time.sleep(interval)
  print("end work2...")
def work3(interval):
  print("work3...")
  time.sleep(interval)
  print("end work3...")
if __name__ == "__main__":
  p1 = multiprocessing.Process(target=work1,args=(1,))
  p2 = multiprocessing.Process(target=work2,args=(2,))
  p3 = multiprocessing.Process(target=work3,args=(3,))
  p1.start()
  p2.start()
  p3.start()
  print("The number of CPU is %d:"%(multiprocessing.cpu_count()))   #打印CPU核数
  for p in multiprocessing.active_children():     #循环打印子进程的名称和pid
    print("子进程名称:%s,子进程pid:%d" %(p.name,p.pid))
  print("ending....")

运行结果:

The number of CPU is 4:
子进程名称:Process-2,子进程pid:7108
子进程名称:Process-1,子进程pid:1896
子进程名称:Process-3,子进程pid:7952
ending....
work3...
work1...
work2...
end work1...
end work2...
end work3...

注:先运行主进程的内容,再运行子进程

(3)将进程定义成一个类

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
import multiprocessing
import time
#将进程定义为一个类
class ClockProcess(multiprocessing.Process):
  def __init__(self,interval):
    multiprocessing.Process.__init__(self)   #重构了Process类里面的构造函数
    self.interval = interval
  def run(self):     #固定用run方法,启动进程自动调用run方法
    n = 5
    while n>0:
      print("The time is {0}".format(time.ctime()))
      time.sleep(self.interval)
      n-=1
if __name__ == "__main__":
  p = ClockProcess(2)
  p.start()

运行结果:

The time is Wed Nov  1 11:31:28 2017
The time is Wed Nov  1 11:31:30 2017
The time is Wed Nov  1 11:31:32 2017
The time is Wed Nov  1 11:31:34 2017
The time is Wed Nov  1 11:31:36 2017

(4)Queue(队列)实现多进程数据传输

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
import multiprocessing
#Queue是多进程安全的队列,可以使用实现多进程之间的数据传递
def writer_proc(q):
  try:
    q.put(1,block=False)    #put方法插入数据到队列中
  except:
    pass
def reader_proc(q):
  try:
    print(q.get(block=False))    #get方法从队列中读取并删除一个元素
  except:
    pass
if __name__ == "__main__":
  q = multiprocessing.Queue()
  writer = multiprocessing.Process(target=writer_proc,args=(q,))
  writer.start()
  reader = multiprocessing.Process(target=reader_proc,args=(q,))
  reader.start()
  reader.join()
  writer.join()

运行结果:

1

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python二分法实现实例
Nov 21 Python
python django集成cas验证系统
Jul 14 Python
python实现在pickling的时候压缩的方法
Sep 25 Python
python中global与nonlocal比较
Nov 21 Python
十个Python程序员易犯的错误
Dec 15 Python
Python函数装饰器实现方法详解
Dec 22 Python
在PyCharm中批量查找及替换的方法
Jan 20 Python
Python 保存矩阵为Excel的实现方法
Jan 28 Python
Python当中的array数组对象实例详解
Jun 12 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
Jun 28 Python
python global关键字的用法详解
Sep 05 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
Feb 27 Python
Python选择网卡发包及接收数据包
Apr 04 #Python
详解Python的数据库操作(pymysql)
Apr 04 #Python
python dlib人脸识别代码实例
Apr 04 #Python
python图像处理入门(一)
Apr 04 #Python
python爬虫简单的添加代理进行访问的实现代码
Apr 04 #Python
Django项目中添加ldap登陆认证功能的实现
Apr 04 #Python
使用 Python 玩转 GitHub 的贡献板(推荐)
Apr 04 #Python
You might like
ThinkPHP使用smarty模板引擎的方法
2014/07/01 PHP
PHP中key和current,next的联合运用实例分析
2016/03/29 PHP
PHP如何实现跨域
2016/05/30 PHP
Yii核心验证器api详解
2016/11/23 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
laravel 实现设置时区的简单方法
2019/10/10 PHP
js触发asp.net的Button的Onclick事件应用
2013/02/02 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
jquery实现的导航固定效果
2014/04/28 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
2014/10/17 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
JS克隆,属性,数组,对象,函数实例分析
2016/11/26 Javascript
React操作真实DOM实现动态吸底部的示例
2017/10/23 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
javascript定时器的简单应用示例【控制方块移动】
2019/06/17 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
用vue写一个日历
2020/11/02 Javascript
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
django中ORM模型常用的字段的使用方法
2019/03/05 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
python实现电子词典
2020/03/03 Python
Python是什么 Python的用处
2020/05/26 Python
简单的Python人脸识别系统
2020/07/14 Python
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
英国美发和美容产品商城:HQhair
2019/02/08 全球购物
作弊检讨书1000字
2014/02/01 职场文书
优秀应届生求职信
2014/06/16 职场文书
社区创先争优承诺书
2014/08/30 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL
nginx配置文件使用环境变量的操作方法
2021/06/02 Servers
Python深度学习之实现卷积神经网络
2021/06/05 Python
《艾尔登法环》发布最新「战技」宣传片
2022/04/03 其他游戏
python读取mat文件生成h5文件的实现
2022/07/15 Python