多进程:是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。

特征:

动态性:进程的实质是程序在多任务系统中的一次执行过程,进程是动态产生,动态消亡的。

并发性:任何进程都可以同其他进程一起并发执行

独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;

异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度执行

结构特征:进程由程序、数据和进程控制块三部分组成。

多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。

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 多进程详细总结相关推荐

  1. python多进程原理_python多进程的详细介绍(附示例)

    本篇文章给大家带来的内容是关于PHP中的SAPI是什么?如何实现?(图文),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 进程 Python是运行在解释器中的语言,查找资料知道,py ...

  2. python多进程打印输出_python 多进程日志 logging

    python的logging模块提供了灵活的标准模块,使得任何Python程序都可以使用这个第三方模块来实现日志记录. 但是 python 中logging 并不支持多进程,所以会遇到不少麻烦. 以 ...

  3. python计算密集型任务_Python多进程和多线程测试比高低,只为证明谁是最快的“仔”

    目的 前面分别详细介绍了python的多进程和多线程,如果还没看前面文章的,请先看下之前的文章详解内容.有任何疑问请留言.那这里就不再对多线程和多进程的实现和用法再赘述了.那各位同学学习了python ...

  4. python并发与并行_python多进程,多线程分别是并行还是并发

    匿名用户 1级 2017-09-30 回答 展开全部 并发和并行 你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行. 你吃饭吃到一半,电话来了,你停了下来接了电话, ...

  5. python文件分块读取_Python多进程分块读取超大文件的方法

    本文实例讲述了Python多进程分块读取超大文件的方法.分享给大家供大家参考,具体如下: 读取超大的文本文件,使用多进程分块读取,将每一块单独输出成文件 # -*- coding: GBK -*- i ...

  6. python多进程卡死_Python 多进程中使用logging导致死锁

    这个问题算是个很老问题了,09年的issue一直到现在还是open的状态:https://bugs.python.org/issue6721 原因 简单的说,如果主进程A中有多个线程A.t1,A.t2 ...

  7. python io密集 多线程_python多进程和多线程究竟谁更快(详解)

    python3.6 threading和multiprocessing 四核+三星250G-850-SSD 自从用多进程和多线程进行编程,一致没搞懂到底谁更快.网上很多都说python多进程更快,因为 ...

  8. python多线程效率低_Python 多进程、多线程效率比较

    Python 界有条不成文的准则: 计算密集型任务适合多进程,IO 密集型任务适合多线程.本篇来作个比较. 通常来说多线程相对于多进程有优势,因为创建一个进程开销比较大,然而因为在 python 中有 ...

  9. python多进程卡住_python多进程假死

    结论:python多进程间用Queue通信时,如果子进程操作Queue满了或者内容比较大的情况下,该子进程会阻塞等待取走Queue内容(如果Queue数据量比较少,不会等待),如果调用join,主进程 ...

  10. python manager详解_python 多进程共享全局变量之Manager()详解

    Manager支持的类型有 list,dict,Namespace,Lock,RLock,Semaphore,BoundedSemaphore,Condition,Event,Queue,Value和 ...

最新文章

  1. net类库中发送电子邮件的方法总结
  2. 五十一、结合百度API接口打造 Python小项目
  3. MySQL高级 - 应用优化
  4. django19:项目开发流程
  5. .jardesc文件
  6. Integral Channel Features-论文整理
  7. 【转】解决win7下重装winXP 系统启动选择菜单消失 问题
  8. [dhtmlxGantt]Milestone Mark-里程碑标识的交错显示
  9. qt设置边框颜色_Qt开源作品14-导航按钮控件
  10. function 自定义函数、函数调用
  11. VC6编译wxWINDOWS-2.4.0-编译EDISON源码
  12. 我的世界java环境安装包_我的世界JAVA版1.7.10下载安装包最新版 v1.7.10
  13. python爬取淘宝数据魔方_淘宝数据魔方看人群情况
  14. Pr:音频和视频的同步
  15. 不意外:Facebook上市遭遇滑铁卢
  16. mysql建立数据透视表_SQL复习笔记 —— 数据透视表的妙用
  17. scrapy爬虫实践之抓取拉钩网招聘信息(2)
  18. 21、关于破解点触的验证码
  19. 数据库主键到底是用自增长(INT)好还是UUID好?
  20. 顽固的计算机老师,电脑运行很慢 四招教你清除电脑系统里的那些“顽固垃圾”...

热门文章

  1. 7.数据结构 --- 图
  2. 3. 盒子模型与兼容性
  3. 11. Magento路由分发过程解析(一):在前端控制器中获取路由对象
  4. 洛谷P2486 [SDOI2011]染色
  5. Alpha冲刺 (2/10)
  6. [django]django model的查询和更新
  7. Eclipse快捷键 10个最有用的快捷键(转载收藏)
  8. Spring Boot集成Spring Data Reids和Spring Session实现Session共享(多个不同的应用共用一个Redis实例)...
  9. '用户 'sa' 登录失败。该用户与可信 SQL Server 连接无关联,做JSP项目连接数据库 ....
  10. 终结者:详述Log4j配置文件中代码的含义