python起多进程服务_python 多进程详细总结
多进程:是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。
特征:
动态性:进程的实质是程序在多任务系统中的一次执行过程,进程是动态产生,动态消亡的。
并发性:任何进程都可以同其他进程一起并发执行
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度执行
结构特征:进程由程序、数据和进程控制块三部分组成。
多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。
python中多进程模块multiprocessing的基本使用:
创建并开启进程的两种方法:
#方法一 直接调用import time
import random
from multiprocessing import Process
def run(name):
print('%s runing' %name)
time.sleep(random.randrange(1,5))
print('%s running end' %name)
'''
创建三个进程
target表示调用对象,即子进程要执行的任务
args表示调用对象的位置参数元组,args=(1,2,'anne',)
'''
p1=Process(target=run,args=('anne',))
p2=Process(target=run,args=('alice',))
p3=Process(target=run,args=('biantai',))
p4=Process(target=run,args=('haha',))
p1.start()
p2.start()
p3.start()
p4.start()
print('主进程')
#方法二 继承式调用
import time
import random
from multiprocessing import Process
class Run(Process):
def __init__(self,name):
super().__init__()
self.name=name
def run(self):
print('%s runing' %self.name)
time.sleep(random.randrange(1,5))
print('%s runing end' %self.name)
p1=Run('anne')
p2=Run('alex')
p3=Run('ab')
p4=Run('hey')
p1.start() #start会自动调用run
p2.start()
p3.start()
p4.start()
print('主进程')
注:上述代码的运行顺序是启动程序时主进程随之启动,接下来主进程负责创建3个子进程,3个子进程去分别执行自己的任务,此时主进程会继续往下走,但有的时候我们需要子进程任务结束之后才让主进程往下走,此时我就需要让主进程等待子进程完成任务后再往下走。此时就用到了join(), 例如:
import time
import random
from multiprocessing import Process
class Run(Process):
def __init__(self,name):
super().__init__()
self.name=name
def run(self):
print('%s runing' %self.name)
time.sleep(random.randrange(1,5))
print('%s runing end' %self.name)
p1=Run('anne')
p2=Run('alex')
p3=Run('ab')
p4=Run('hey')
p1.start() #start会自动调用run
p2.start()
p3.start()
p4.start()
p1.join() #等待p1进程停止
p2.join()
p3.join()
p4.join()
print('主线程')
#注意上面的代码是主进程等待子进程,等待的是主进程,所以等待的总时间是子进程中耗费时间最长的那个进程运行的时间
#上述启动进程与join进程可以简写为
# p_l=[p1,p2,p3,p4]
#
# for p in p_l:
# p.start()
#
# for p in p_l:
# p.join()
主进程等待子进程结束
进程之间不共享全局变量:
import os
from multiprocessing import Process
a = 100
def run():
print("子进程正在执行pid为{}".format(os.getpid()))
global a
a += 100
print("子进程执行结束a的值为{}".format(a))
if __name__ == '__main__':
p=Process(target=run)
p.start()
p.join()
print("父进程{}执行结束a的值为{}".format(os.getppid(),a))
'''
结果:
子进程正在执行pid为57822
子进程执行结束a的值为200
父进程16504执行结束a的值为100
'''
python起多进程服务_python 多进程详细总结相关推荐
- python多进程原理_python多进程的详细介绍(附示例)
本篇文章给大家带来的内容是关于PHP中的SAPI是什么?如何实现?(图文),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 进程 Python是运行在解释器中的语言,查找资料知道,py ...
- python多进程打印输出_python 多进程日志 logging
python的logging模块提供了灵活的标准模块,使得任何Python程序都可以使用这个第三方模块来实现日志记录. 但是 python 中logging 并不支持多进程,所以会遇到不少麻烦. 以 ...
- python计算密集型任务_Python多进程和多线程测试比高低,只为证明谁是最快的“仔”
目的 前面分别详细介绍了python的多进程和多线程,如果还没看前面文章的,请先看下之前的文章详解内容.有任何疑问请留言.那这里就不再对多线程和多进程的实现和用法再赘述了.那各位同学学习了python ...
- python并发与并行_python多进程,多线程分别是并行还是并发
匿名用户 1级 2017-09-30 回答 展开全部 并发和并行 你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行. 你吃饭吃到一半,电话来了,你停了下来接了电话, ...
- python文件分块读取_Python多进程分块读取超大文件的方法
本文实例讲述了Python多进程分块读取超大文件的方法.分享给大家供大家参考,具体如下: 读取超大的文本文件,使用多进程分块读取,将每一块单独输出成文件 # -*- coding: GBK -*- i ...
- python多进程卡死_Python 多进程中使用logging导致死锁
这个问题算是个很老问题了,09年的issue一直到现在还是open的状态:https://bugs.python.org/issue6721 原因 简单的说,如果主进程A中有多个线程A.t1,A.t2 ...
- python io密集 多线程_python多进程和多线程究竟谁更快(详解)
python3.6 threading和multiprocessing 四核+三星250G-850-SSD 自从用多进程和多线程进行编程,一致没搞懂到底谁更快.网上很多都说python多进程更快,因为 ...
- python多线程效率低_Python 多进程、多线程效率比较
Python 界有条不成文的准则: 计算密集型任务适合多进程,IO 密集型任务适合多线程.本篇来作个比较. 通常来说多线程相对于多进程有优势,因为创建一个进程开销比较大,然而因为在 python 中有 ...
- python多进程卡住_python多进程假死
结论:python多进程间用Queue通信时,如果子进程操作Queue满了或者内容比较大的情况下,该子进程会阻塞等待取走Queue内容(如果Queue数据量比较少,不会等待),如果调用join,主进程 ...
- python manager详解_python 多进程共享全局变量之Manager()详解
Manager支持的类型有 list,dict,Namespace,Lock,RLock,Semaphore,BoundedSemaphore,Condition,Event,Queue,Value和 ...
最新文章
- net类库中发送电子邮件的方法总结
- 五十一、结合百度API接口打造 Python小项目
- MySQL高级 - 应用优化
- django19:项目开发流程
- .jardesc文件
- Integral Channel Features-论文整理
- 【转】解决win7下重装winXP 系统启动选择菜单消失 问题
- [dhtmlxGantt]Milestone Mark-里程碑标识的交错显示
- qt设置边框颜色_Qt开源作品14-导航按钮控件
- function 自定义函数、函数调用
- VC6编译wxWINDOWS-2.4.0-编译EDISON源码
- 我的世界java环境安装包_我的世界JAVA版1.7.10下载安装包最新版 v1.7.10
- python爬取淘宝数据魔方_淘宝数据魔方看人群情况
- Pr:音频和视频的同步
- 不意外:Facebook上市遭遇滑铁卢
- mysql建立数据透视表_SQL复习笔记 —— 数据透视表的妙用
- scrapy爬虫实践之抓取拉钩网招聘信息(2)
- 21、关于破解点触的验证码
- 数据库主键到底是用自增长(INT)好还是UUID好?
- 顽固的计算机老师,电脑运行很慢 四招教你清除电脑系统里的那些“顽固垃圾”...
热门文章
- 7.数据结构 --- 图
- 3. 盒子模型与兼容性
- 11. Magento路由分发过程解析(一):在前端控制器中获取路由对象
- 洛谷P2486 [SDOI2011]染色
- Alpha冲刺 (2/10)
- [django]django model的查询和更新
- Eclipse快捷键 10个最有用的快捷键(转载收藏)
- Spring Boot集成Spring Data Reids和Spring Session实现Session共享(多个不同的应用共用一个Redis实例)...
- '用户 'sa' 登录失败。该用户与可信 SQL Server 连接无关联,做JSP项目连接数据库 ....
- 终结者:详述Log4j配置文件中代码的含义