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之关于循环的小伎俩
Oct 02 Python
Python无损音乐搜索引擎实现代码
Feb 02 Python
python增加矩阵维度的实例讲解
Apr 04 Python
Python中Numpy包的安装与使用方法简明教程
Jul 03 Python
Python中对数组集进行按行打乱shuffle的方法
Nov 08 Python
用django设置session过期时间的方法解析
Aug 05 Python
解决python 文本过滤和清理问题
Aug 28 Python
selenium+Chrome滑动验证码破解二(某某网站)
Dec 17 Python
pytorch逐元素比较tensor大小实例
Jan 03 Python
序列化Python对象的方法
Aug 01 Python
Python 中的单分派泛函数你真的了解吗
Jun 22 Python
实战Python爬虫爬取酷我音乐
Apr 11 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
PHP4实际应用经验篇(5)
2006/10/09 PHP
PHPWind 发帖回帖Api PHP版打包下载
2010/02/08 PHP
PHP curl实现抓取302跳转后页面的示例
2014/07/04 PHP
Yii实现多按钮保存与提交的方法
2014/12/03 PHP
高质量PHP代码的50个实用技巧必备(上)
2016/01/22 PHP
php实现文件与16进制相互转换的方法示例
2017/02/16 PHP
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
实例解析JS布尔对象的toString()方法和valueOf()方法
2015/10/25 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
Bootstrap面板使用方法
2017/01/16 Javascript
JS实现手写parseInt的方法示例
2017/09/24 Javascript
vue mounted组件的使用
2018/06/18 Javascript
layDate插件设置开始和结束时间
2018/11/15 Javascript
Vue v-bind动态绑定class实例方法
2020/01/15 Javascript
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
2014/04/25 Python
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
python之Socket网络编程详解
2016/09/29 Python
基于DataFrame筛选数据与loc的用法详解
2018/05/18 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
2019/07/04 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
2019/07/31 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
python的json包位置及用法总结
2020/06/21 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
2020/07/28 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
pycharm + django跨域无提示的解决方法
2020/12/06 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
美国Randolph太阳镜官网:美国制造的飞行员太阳镜和射击眼镜
2018/06/15 全球购物
美国体育用品商店:Academy Sports + Outdoors
2020/01/04 全球购物
银行出纳岗位职责
2013/11/25 职场文书
《小蝌蚪找妈妈》教学反思
2014/02/21 职场文书
人事部岗位职责范本
2014/03/05 职场文书
求职意向书范文
2014/04/01 职场文书
安全生产责任书范本
2014/04/15 职场文书
大学生学习面向未来的赶考思想汇报
2014/09/12 职场文书
学生党支部工作总结2015
2015/05/26 职场文书