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实现一个简单的MySQL类
Jan 07 Python
利用Python的Twisted框架实现webshell密码扫描器的教程
Apr 16 Python
Python获取CPU、内存使用率以及网络使用状态代码
Feb 08 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
Jun 11 Python
pyqt5 获取显示器的分辨率的方法
Jun 18 Python
Python箱型图处理离群点的例子
Dec 09 Python
Python实现结构体代码实例
Feb 10 Python
解决jupyter notebook 出现In[*]的问题
Apr 13 Python
Flask模板引擎Jinja2使用实例
Apr 23 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
Jan 06 Python
基于Python实现一个春节倒计时脚本
Jan 22 Python
Python读取和写入Excel数据
Apr 20 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
PHP session_start()问题解疑(详细介绍)
2013/07/05 PHP
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
基于jquery的loading效果实现代码
2010/11/05 Javascript
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
使用js检测浏览器是否支持html5中的video标签的方法
2014/03/12 Javascript
JavaScript两种跨域技术全面介绍
2014/04/16 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
js修改onclick动作的四种方法(推荐)
2016/08/18 Javascript
js防阻塞加载的实现方法
2016/09/09 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
2017/03/17 Javascript
js实现简易计算器小功能
2020/11/18 Javascript
Python中的lstrip()方法使用简介
2015/05/19 Python
Python 字符串与数字输出方法
2018/07/16 Python
Django REST Framework 分页(Pagination)详解
2020/11/30 Python
全面介绍python中很常用的单元测试框架unitest
2020/12/14 Python
python定义具名元组实例操作
2021/02/28 Python
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
满月酒主持词
2014/03/27 职场文书
个人租房协议书
2014/04/09 职场文书
学生请假条
2014/04/11 职场文书
车间安全生产标语
2014/06/06 职场文书
刑事和解协议书范本
2014/11/19 职场文书
圆明园观后感
2015/06/03 职场文书
浅谈mysql增加索引不生效的几种情况
2021/06/23 MySQL
Nginx进程调度问题详解
2021/09/25 Servers
linux下安装redis图文详细步骤
2021/12/04 Redis