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实现的jpg格式图片修复代码
Apr 21 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
Jan 04 Python
opencv python 基于KNN的手写体识别的实例
Aug 03 Python
在python中获取div的文本内容并和想定结果进行对比详解
Jan 02 Python
django与小程序实现登录验证功能的示例代码
Feb 19 Python
详解如何管理多个Python版本和虚拟环境
May 10 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
Python的几种主动结束程序方式
Nov 22 Python
python实现Pyecharts实现动态地图(Map、Geo)
Mar 25 Python
如何用python免费看美剧
Aug 11 Python
python定时截屏实现
Nov 02 Python
python如何调用php文件中的函数详解
Dec 29 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
自己前几天写的无限分类类
2007/02/14 PHP
php将字符串转换成16进制的方法
2015/03/17 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
2015/12/18 PHP
PHP模板引擎Smarty自定义变量调解器用法
2016/04/11 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
2017/02/17 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
jquery中的sortable排序之后的保存状态的解决方法
2010/01/28 Javascript
JQuery实现简单时尚快捷的气泡提示插件
2012/12/20 Javascript
扩展JS Date对象时间格式化功能的小例子
2013/12/02 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
纯javascript实现分页(两种方法)
2015/08/26 Javascript
js纯数字逐一停止显示效果的实现代码
2016/03/16 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
2016/04/01 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
easyui combobox开启搜索自动完成功能的实例代码
2016/11/08 Javascript
Node.JS文件系统解析实例详解
2017/05/15 Javascript
JS鼠标滚动分页效果示例
2017/07/05 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
2017/08/16 jQuery
angular 服务的单例模式(依赖注入模式下)详解
2018/10/22 Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
2019/02/18 Javascript
elementUI select组件默认选中效果实现的方法
2019/03/25 Javascript
vue 子组件和父组件传值的示例
2020/09/11 Javascript
在Python中使用HTML模版的教程
2015/04/29 Python
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
Python理解递归的方法总结
2019/01/28 Python
python 读取修改pcap包的例子
2019/07/23 Python
python 内置函数汇总详解
2019/09/16 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
Skyscanner英国:苏格兰的全球三大领先航班搜索服务之一
2017/11/09 全球购物
劳资员岗位职责
2013/11/11 职场文书
总经理助理的八要求
2013/11/12 职场文书
开国大典观后感
2015/06/04 职场文书
Python极值整数的边界探讨分析
2021/09/15 Python
python处理json数据文件
2022/04/11 Python