linux很多python进程,Python多进程编程详解
序. 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多进程编程详解相关推荐
- python 进程池pool使用详解
和选用线程池来关系多线程类似,当程序中设置到多进程编程时,Python 提供了更好的管理多个进程的方式,就是使用进程池. 在利用 Python 进行系统管理的时候,特别是同时操作多个文件目录,或者远程 ...
- c python boost.python_如何利用Boost.Python实现Python C/C++混合编程详解
前言 学习中如果碰到问题,参考官网例子:D:boost_1_61_0libspythontest 参考:Boost.Python 中英文文档. 利用Boost.Python实现Python C/C++ ...
- Linux下的进程PCB以及线程详解
进程PCB详解 为了每个程序能独立运行,便为其配置了一个专门的数据结构,称为:PCB(PCB,Process Control Block)进程控制块. 进程控制块描述了.管理着进程运行的全部信息,是操 ...
- linux下的c语言mysql编程,详解java google Thumbnails 图片处理
在后端开发的过程中,都逃不开与文件传输特别是图片的传输打交道,但是因为现在各种拍照设备发展越来越快,拍出的照片更是越来越清晰,但是照片文件的大小也是越来越大了,手机拍照小则2M大则30M这在网络传输过 ...
- python利器怎么编程-Python任务调度利器之APScheduler详解
任务调度应用场景 所谓的任务调度是指安排任务的执行计划,即何时执行,怎么执行等.在现实项目中经常出现它们的身影:特别是数据类项目,比如实时统计每5分钟网站的访问量,就需要每5分钟定时从日志数据分析访问 ...
- python编程入门与案例详解-Pythony运维入门之Socket网络编程详解
Socket是什么? Socket 是电脑网络中进程间数据流的端点Socket 是操作系统的通信机制应用程序通过Socket进行网络数据的传输 首先,简单了解一下TCP通信过程: TCP三次握手(面试 ...
- python编程基础:python 实现GUI(图形用户界面)编程详解
今天小编就为大家分享一篇python 实现GUI(图形用户界面)编程详解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 Python支持多种图形界面的第三方库,包括: wxWidge ...
- Linux进程管理工具 Supervisor详解
介绍 Supervisor安装与配置(linux/unix进程管理工具) Supervisor(http://supervisord.org)是用Python开发的一个client/server服务, ...
- python语言入门详解-python初级教程:入门详解
python初级教程:入门详解 Crifan Li 目录 前言 .................................................................... ...
最新文章
- 毕业论文答辩老师最想听到什么?最关注的问题是什么?
- 20150720 Two heads are better than one
- onenote怎么同步到电脑_OneNote“此分区文件似乎已损坏”的解决办法
- iOS开发中用到的第三方库概览
- python windows系统_Windows系统下Python-Windows详细安装教程
- Qt 模态和非模态窗口的创建与关闭
- c# MVC在WEB.Config中配置MIME
- C++调用SSD caffe模型进行物体检测-Opencv3.4.3
- Jetpack Compose Modifier用法详解,如何保证高可用
- 用什么擦地最干净脑筋急转弯_你没想过的“脑筋急转弯”,才是启发孩子智力的法宝(附资源下载)...
- Spring Cloud Bus 使用说明
- DI高速计数器编码器脉冲计数器PNPNPN输入模块高低电平
- android适配器报空指针错误,适配器总是出现空指针问题
- ArcGIS批量导出图片
- 基于马尔可夫过程的一种新型混合PSO粒子群算法(SCI二区高被引文献)介绍及算法复现(使用chatgpt)
- AutoJs学习-快手组队助力脚本
- PNP三极管和NPN三极管的开关电路
- jupyter 中重新 import 模块
- 程序员财富自由之路 自媒体篇 | 3000字干货分享
- 利用云函数实现网易云音乐自动签到、刷歌
热门文章
- Python稳基修炼的经典案例15(计算机二级、初学者必会字符格式处理)
- Python稳基修炼的经典案例4(计算机二级、初学者必须掌握的例题)
- python逻辑取反运算符_python学习笔记------逻辑运算符
- python怎么设置颜色深浅变化_机器学习中减弱不同图像数据色调及颜色深浅差异...
- Python+pywin32操作Excel文件常用功能(268行代码+注释)
- Python获取每个用户使用的CPU和内存百分比
- ubuntu 64 12.04 oracle,Ubuntu 12.04 (amd64)安装Oracle 11g 总结
- ctfmon是什么启动项_启动项里ctfmon是什么意思,干什么用的??
- threejs加载模型挤压变形_玻璃钢模具表面变形的原因及解决办法
- 高性能python_[转]【原创】High Performance Python(Python 高性能计算)(一)