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获取Linux系统的各种信息
Jul 10 Python
Python中endswith()函数的基本使用
Apr 07 Python
Django自定义分页效果
Jun 27 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
Feb 22 Python
Python 3.8 新功能全解
Jul 25 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
关于Django Models CharField 参数说明
Mar 31 Python
不到20行实现Python代码即可制作精美证件照
Apr 24 Python
Python实现查找数据库最接近的数据
Jun 08 Python
详解anaconda离线安装pytorchGPU版
Sep 08 Python
python 制作网站小说下载器
Feb 20 Python
python 对图片进行简单的处理
Jun 23 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 简单日历实现代码
2009/10/28 PHP
解析php下载远程图片函数 可伪造来路
2013/06/25 PHP
php实现的通用图片处理类
2015/03/24 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
PHP number_format函数原理及实例解析
2020/07/14 PHP
dwr spring的集成实现代码
2009/03/22 Javascript
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
js导出txt示例代码
2014/01/14 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
2015/08/24 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
Vue.js创建Calendar日历效果
2016/11/03 Javascript
Angularjs的Controller间通信机制实例分析
2016/11/07 Javascript
JS实现复制功能
2017/03/01 Javascript
react实现点击选中的li高亮的示例代码
2018/05/24 Javascript
微信小程序实现的自定义分享功能示例
2019/02/12 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
antd form表单数据回显操作
2020/11/02 Javascript
python实现进程间通信简单实例
2014/07/23 Python
Python使用Beautiful Soup包编写爬虫时的一些关键点
2016/01/20 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
PyTorch中Tensor的拼接与拆分的实现
2019/08/18 Python
解决Python3下map函数的显示问题
2019/12/04 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
python读取tif图片时保留其16bit的编码格式实例
2020/01/13 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
2020/02/17 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
h5页面唤起app如果没安装就跳转下载(iOS和Android)
2020/06/03 HTML / CSS
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
delegate与普通函数的区别
2014/01/22 面试题
大学生毕业自荐信
2013/10/10 职场文书
高中的职业生涯规划书
2013/12/28 职场文书
公司人事专员岗位职责
2014/08/11 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
早恋主题班会
2015/08/14 职场文书
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS