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将html转成PDF的实现代码(包含中文)
Mar 04 Python
Python专用方法与迭代机制实例分析
Sep 15 Python
pandas数据框,统计某列数据对应的个数方法
Apr 11 Python
python+pandas分析nginx日志的实例
Apr 28 Python
pandas.DataFrame选取/排除特定行的方法
Jul 03 Python
零基础使用Python读写处理Excel表格的方法
May 02 Python
python爬虫 Pyppeteer使用方法解析
Sep 28 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 Python
Python生成器generator原理及用法解析
Jul 20 Python
Python使用jpype模块调用jar包过程解析
Jul 29 Python
利用python调用摄像头的实例分析
Jun 07 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 chmod 函数与批量修改文件目录权限
2010/05/10 PHP
PHP取得一个类的属性和方法的实现代码
2011/05/22 PHP
PHP将字符分解为多个字符串的方法
2014/11/22 PHP
Zend Framework教程之模型Model用法简单实例
2016/03/04 PHP
JavaScript 无符号右移运算符
2009/04/17 Javascript
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
javascript+xml实现简单图片轮换(只支持IE)
2012/12/23 Javascript
jQuery实现用方向键控制层的上下左右移动
2013/01/13 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
2013/01/25 Javascript
JavaScript中的undefined学习总结
2013/11/30 Javascript
JavaScript中的toLocaleDateString()方法使用简介
2015/06/12 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
jQuery实现页面评论栏中访客信息自动填写功能的方法
2016/05/23 Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
2016/08/15 Javascript
详解angular 中的自定义指令之详解API
2017/06/20 Javascript
vue-router 权限控制的示例代码
2017/09/21 Javascript
javaScript实现滚动条事件详解
2020/03/24 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
JS实现获取自定义属性data值的方法示例
2018/12/19 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
python实现中文分词FMM算法实例
2015/07/10 Python
Python中Django 后台自定义表单控件
2017/03/28 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
2018/12/05 Python
在python中利用KNN实现对iris进行分类的方法
2018/12/11 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
html5如何在Canvas中实现自定义路径动画示例
2017/09/18 HTML / CSS
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
天巡全球:Skyscanner Global
2017/06/20 全球购物
C++是不是类型安全的
2014/02/18 面试题
六一儿童节主持词
2014/03/21 职场文书
MySQL一些常用高级SQL语句
2021/07/03 MySQL
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android
科学家研发出新型速效酶,可在 24 小时内降解塑料制品
2022/04/29 数码科技