序. multiprocessing

Python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在Python中大部分情况需要使用多进程。Python提供了非常好用的多进程包multiprocessing,只需要定义一个函数,Python会完成其他所有事情。借助这个包,可以轻松完成从单进程到并发执行的转换。multiprocessing支持子进程、通信和共享数据、执行不同形式的同步,提供了Process、Queue、Pipe、Lock等组件。

1. Process

创建进程的类:Process([group [, target [, name [, args [, kwargs]]]]]),target表示调用对象,args表示调用对象的位置参数元组。kwargs表示调用对象的字典。name为别名。group实质上不使用。

方法:is_alive()、join([timeout])、run()、start()、terminate()。其中,Process以start()启动某个进程。

属性:authkey、daemon(要通过start()设置)、exitcode(进程在运行时为None、如果为–N,表示被信号N结束)、name、pid。其中daemon是父进程终止后自动终止,且自己不能产生新进程,必须在start()之前设置。

例1.1:创建函数并将其作为单个进程

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__":

p = multiprocessing.Process(target = worker, args = (3,))

p.start()

print ("p.pid:", p.pid)

print ("p.name:", p.name)

print ("p.is_alive:", p.is_alive())

运行结果:

p.pid: 2322

p.name: Process-1

p.is_alive: True

The time is Sun May  5 07:36:18 2019

The time is Sun May  5 07:36:21 2019

The time is Sun May  5 07:36:24 2019

The time is Sun May  5 07:36:27 2019

The time is Sun May  5 07:36:30 2019

[Finished in 15.2s]

例1.2:创建函数并将其作为多个进程

import multiprocessing

import time

def worker_1(interval):

print ("worker_1")

time.sleep(interval)

print ("end worker_1")

def worker_2(interval):

print ("worker_2")

time.sleep(interval)

print ("end worker_2")

def worker_3(interval):

print ("worker_3")

time.sleep(interval)

print ("end worker_3")

if __name__ == "__main__":

p1 = multiprocessing.Process(target = worker_1, args = (2,))

p2 = multiprocessing.Process(target = worker_2, args = (3,))

p3 = multiprocessing.Process(target = worker_3, args = (4,))

p1.start()

p2.start()

p3.start()

print("The number of CPU is:" + str(multiprocessing.cpu_count()))

for p in multiprocessing.active_children():

print("child p.name:" + p.name + "\tp.id" + str(p.pid))

print ("END!!!!!!!!!!!!!!!!!")

运行结果如下:

worker_2

worker_1

worker_3

The number of CPU is:1

child  p.name:Process-3 p.id2783

child  p.name:Process-1 p.id2781

child  p.name:Process-2 p.id2782

END!!!!!!!!!!!!!!!!!

end worker_1

end worker_2

end worker_3

[Finished in 4.1s]

例1.3:将进程定义为类

import multiprocessing

import time

class ClockProcess(multiprocessing.Process):

def __init__(self, interval):

multiprocessing.Process.__init__(self)

self.interval = interval

def run(self):

n = 5

while n > 0:

print("the time is {0}".format(time.ctime()))

time.sleep(self.interval)

n -= 1

if __name__ == '__main__':

p = ClockProcess(3)

p.start()

注:进程p调用start()时,自动调用run()

结果如下:

the time is Sun May  5 07:45:05 2019

the time is Sun May  5 07:45:08 2019

the time is Sun May  5 07:45:11 2019

the time is Sun May  5 07:45:14 2019

the time is Sun May  5 07:45:17 2019

[Finished in 15.1s]

例1.4:daemon程序对比结果

#1.4-1 不加daemon属性

import multiprocessing

import time

def worker(interval):

print("work start:{0}".format(time.ctime()));

time.sleep(interval)

print("work end:{0}".format(time.ctime()));

if __name__ == "__main__":

p = multiprocessing.Process(target = worker, args = (3,))

p.start()

print ("end!")

结果如下:

end!

work start:Sun May  5 07:46:54 2019

work end:Sun May  5 07:46:57 2019

[Finished in 3.1s]

#1.4-2 加上daemon属性

import multiprocessing

import time

def worker(interval):

print("work start:{0}".format(time.ctime()));

time.sleep(interval)

print("work end:{0}".format(time.ctime()));

if __name__ == "__main__":

p = multiprocessing.Process(target = worker, args = (3,))

p.daemon = True

p.start()

print ("end!")

结果如下:

end!

[Finished in 0.1s]

注:因子进程设置了daemon属性,主进程结束,它们就随着结束了。

#1.4-3 设置daemon执行完结束的方法

import multiprocessing

import time

def worker(interval):

print("work start:{0}".format(time.ctime()));

time.sleep(interval)

print("work end:{0}".format(time.ctime()));

if __name__ == "__main__":

p = multiprocessing.Process(target = worker, args = (3,))

p.daemon = True

p.start()

p.join()

print ("end!")

结果如下:

work start:Sun May  5 07:49:59 2019

work end:Sun May  5 07:50:02 2019

end!

[Finished in 3.1s]

待续,继续更新中......

linux很多python进程,Python多进程编程详解相关推荐

  1. python 进程池pool使用详解

    和选用线程池来关系多线程类似,当程序中设置到多进程编程时,Python 提供了更好的管理多个进程的方式,就是使用进程池. 在利用 Python 进行系统管理的时候,特别是同时操作多个文件目录,或者远程 ...

  2. c python boost.python_如何利用Boost.Python实现Python C/C++混合编程详解

    前言 学习中如果碰到问题,参考官网例子:D:boost_1_61_0libspythontest 参考:Boost.Python 中英文文档. 利用Boost.Python实现Python C/C++ ...

  3. Linux下的进程PCB以及线程详解

    进程PCB详解 为了每个程序能独立运行,便为其配置了一个专门的数据结构,称为:PCB(PCB,Process Control Block)进程控制块. 进程控制块描述了.管理着进程运行的全部信息,是操 ...

  4. linux下的c语言mysql编程,详解java google Thumbnails 图片处理

    在后端开发的过程中,都逃不开与文件传输特别是图片的传输打交道,但是因为现在各种拍照设备发展越来越快,拍出的照片更是越来越清晰,但是照片文件的大小也是越来越大了,手机拍照小则2M大则30M这在网络传输过 ...

  5. python利器怎么编程-Python任务调度利器之APScheduler详解

    任务调度应用场景 所谓的任务调度是指安排任务的执行计划,即何时执行,怎么执行等.在现实项目中经常出现它们的身影:特别是数据类项目,比如实时统计每5分钟网站的访问量,就需要每5分钟定时从日志数据分析访问 ...

  6. python编程入门与案例详解-Pythony运维入门之Socket网络编程详解

    Socket是什么? Socket 是电脑网络中进程间数据流的端点Socket 是操作系统的通信机制应用程序通过Socket进行网络数据的传输 首先,简单了解一下TCP通信过程: TCP三次握手(面试 ...

  7. python编程基础:python 实现GUI(图形用户界面)编程详解

    今天小编就为大家分享一篇python 实现GUI(图形用户界面)编程详解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 Python支持多种图形界面的第三方库,包括: wxWidge ...

  8. Linux进程管理工具 Supervisor详解

    介绍 Supervisor安装与配置(linux/unix进程管理工具) Supervisor(http://supervisord.org)是用Python开发的一个client/server服务, ...

  9. python语言入门详解-python初级教程:入门详解

    python初级教程:入门详解 Crifan Li 目录 前言 .................................................................... ...

最新文章

  1. 毕业论文答辩老师最想听到什么?最关注的问题是什么?
  2. 20150720 Two heads are better than one
  3. onenote怎么同步到电脑_OneNote“此分区文件似乎已损坏”的解决办法
  4. iOS开发中用到的第三方库概览
  5. python windows系统_Windows系统下Python-Windows详细安装教程
  6. Qt 模态和非模态窗口的创建与关闭
  7. c# MVC在WEB.Config中配置MIME
  8. C++调用SSD caffe模型进行物体检测-Opencv3.4.3
  9. Jetpack Compose Modifier用法详解,如何保证高可用
  10. 用什么擦地最干净脑筋急转弯_你没想过的“脑筋急转弯”,才是启发孩子智力的法宝(附资源下载)...
  11. Spring Cloud Bus 使用说明
  12. DI高速计数器编码器脉冲计数器PNPNPN输入模块高低电平
  13. android适配器报空指针错误,适配器总是出现空指针问题
  14. ArcGIS批量导出图片
  15. 基于马尔可夫过程的一种新型混合PSO粒子群算法(SCI二区高被引文献)介绍及算法复现(使用chatgpt)
  16. AutoJs学习-快手组队助力脚本
  17. PNP三极管和NPN三极管的开关电路
  18. jupyter 中重新 import 模块
  19. 程序员财富自由之路 自媒体篇 | 3000字干货分享
  20. 利用云函数实现网易云音乐自动签到、刷歌

热门文章

  1. Python稳基修炼的经典案例15(计算机二级、初学者必会字符格式处理)
  2. Python稳基修炼的经典案例4(计算机二级、初学者必须掌握的例题)
  3. python逻辑取反运算符_python学习笔记------逻辑运算符
  4. python怎么设置颜色深浅变化_机器学习中减弱不同图像数据色调及颜色深浅差异...
  5. Python+pywin32操作Excel文件常用功能(268行代码+注释)
  6. Python获取每个用户使用的CPU和内存百分比
  7. ubuntu 64 12.04 oracle,Ubuntu 12.04 (amd64)安装Oracle 11g 总结
  8. ctfmon是什么启动项_启动项里ctfmon是什么意思,干什么用的??
  9. threejs加载模型挤压变形_玻璃钢模具表面变形的原因及解决办法
  10. 高性能python_[转]【原创】High Performance Python(Python 高性能计算)(一)