原文:https://www.cnblogs.com/LY-C/p/9145729.html

进程:资源分配的基本单位,进程数量为cpu核数+1,os.cpu_count()。计算密集时,使用进程

守护进程随着主进程的最后一句代码结束而结束

使用process模块可以创建进程

from multiprocessing import Process
p = Process(target,args,name)
target:表示调用对象,即子进程要执行的任务
args:表示调用对象的位置参数”元组“
name:进程的名字

  方法

p.start():启动一个子进程,系统决定什么时候调用p.run()
p.run():立即运行子进程
p.terminate():强制终止进程p,不会进行任何清理操作,如果p创建了子进程,该子进程就成了僵尸进程,使用该方法需要特别小心这种情况。如果p还保存了一个锁那么也将不会被释放,进而导致死锁
p.is_alive():判断p进程是否还存在,如果p仍然运行,返回True
p.join([timeout]):异步变同步,让主进程等待子进程执行完毕(强调:是主线程处于等的状态,而p是处于运行的状态)。timeout是可选的超时时间,需要强调的是,p.join只能join住start开启的进程,而不能join住run开启的进程

  多进程启动

#如果好多进程都要启动,代码太长可以写成这样
p_list = [p1,p2,p3,p4,p5]
[i.start() for i in p_list]

  属性

p.daemon:默认值为False,如果设为True,代表p为后台运行的守护进程,当p的父进程终止时,p也随之终止,并且设定为True后,p不能创建自己的新进程,必须在p.start()之前设置
p.name:进程的名称
p.pid:进程的pid

  示例

from multiprocessing import Process
import time def func(name):
print('son 的名字是 %s '%name)
time.sleep(5)
print('这里是son') if __name__ == '__main__':
p = Process(target = func,args=('xxx',))
p.start()
time.sleep(2)
p.join()# 代码执行到这里,主进程main会停止等待子进程执行完毕才继续
print('这里是father')

  锁机制

from multiprocessing import Lock
l = Lock() #创建一个锁 l.acquire() # 加锁 l.release() # 释放锁

  信号机制

from multiprocessing import Semaphore
l = Semaphore(n) #创建锁,n是指初始化一把锁配几把钥匙,一个int型 l.acquire() #加锁,可以加n把锁 l.release() #释放锁 #信号量机制比锁机制多了一个计数器,这个计数器是用来记录当前剩余几把钥匙的。
#当计数器为0时,表示没有钥匙了,此时acquire()处于阻塞。
#对于计数器来说,每acquire一次,计数器内部就减1,release一次,计数器就加1

  事件机制

from multiprocessing import Event

e = Event()   #创建事件
e.wait() #判断is_set的bool值,如果bool为True,则非阻塞,bool值为False,则阻塞
e.set() #将is_set()设为True
e.clear() # 将is_set()设为False e.is_set() # 标识
# 事件是通过is_set()的bool值,去标识e.wait() 的阻塞状态
# 当is_set()的bool值为False时,e.wait()是阻塞状态
# 当is_set()的bool值为True时,e.wait()是非阻塞状态
# 当使用set()时,是把is_set的bool变为True
# 当使用clear()时,是把is_set的bool变为False

  队列

#先进先出
from multiprocessing import Queue q = Queue([n]) #n为该队列最多元素的个数,省略不限制 q.get( [ block [ ,timeout ] ] )
#返回q中的一个项目。如果q为空,此方法将阻塞,直到队列中有项目可用为止。
#block用于控制阻塞行为,默认为True. 如果设置为False,将引发Queue.Empty异常#timeout是可选超时时间,用在阻塞模式中。如果在指定的时间间隔内没有项目可用,将引发Queue.Empty异常。 q.get_nowait( ) #同q.get(False)方法。 q.put(item [, block [,timeout ] ] )
#将item放入队列。如果队列已满,此方法将阻塞至有空间可用为止。
#block控制阻塞行为,默认为True。如果设置为False,将引发Queue.Empty异常#timeout指定在阻塞模式中等待可用空间的时间长短。超时后将引发Queue.Full异常。 q.qsize() #返回队列中目前项目的正确数量。
q.empty() #如果调用此方法时 q为空,返回True。
q.full() #如果队列已满,返回为True.

  进程间共享内存

from multiprocessing import Manager
m = Manager()
num = m.dict({键 : 值})
num = m.list([1,2,3])

  进程池

from multiprocessing import Pool
p = Pool(5) #创建进程池,限定进程个数 p.apply(func,args=(,)) #同步执行线程,阻塞 p.apply_async(func,args=(,),callback=func2) #异步执行线程,非阻塞
#func函数返回的值,传给了callback后面接的函数,进一步执行 p.map(func,iter) #异步执行,iter为可迭代对象 p.close() #不在向进程池中添加任务,同步不需要使用 p.join() #等待进程池执行完任务,同步不需要使用

  

python process的更多相关文章

  1. python process,queue

    #-*- coding:utf-8 -*- from multiprocessing import Process,Queue import os,time,random def write(q): ...

  2. Python process (进程)

    进程 (process) 进程是对各种资源管理的集合,包含对各种资源的调用.内存的管理.网络接口的调用 进程要操作 CPU 必须先启动一个线程,启动一个进程的时候会自动创建一个线程,进程里的第一个线程 ...

  3. 会务准备期间材料准备工作具体实施总结 ----(vim技巧应用, python信息提取与整合, microsoft word格式调整批量化)

    会务准备期间材料准备工作具体实施总结(vim, python, microsoft word) span.kw { color: #007020; font-weight: bold; } code ...

  4. python执行shell命令

    1 os.system 可以返回运行shell命令状态,同时会在终端输出运行结果 例如 ipython中运行如下命令,返回运行状态status os.system('cat /etc/passwdqc ...

  5. [转载] python利用psutil遍历进程名字和exe所在目录

    本文转载自: http://www.duanzhihe.com/1594.html http://www.jianshu.com/p/64e265f663f6 import psutil,os,tim ...

  6. 用gdb调试python多线程代码-记一次死锁的发现

    | 版权:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.如有问题,可以邮件:wangxu198709@gmail.com 前言 相信很多人都有 ...

  7. python并发编程之多进程(二):互斥锁(同步锁)&进程其他属性&进程间通信(queue)&生产者消费者模型

    一,互斥锁,同步锁 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 竞争带来的结果就是错乱,如何控制,就是加锁处理 part1:多个进程共享同一打印终 ...

  8. python threading模块中的join()方法和setDeamon()方法的一些理解

    之前用多线程的时候看见了很多文章,比较常用的大概就是join()和setDeamon()了. 先说一下自己对join()的理解吧: def join(self, timeout=None): &quo ...

  9. python模块:subprocess

    # subprocess - Subprocesses with accessible I/O streams # # For more information about this module, ...

随机推荐

  1. [翻译] C# 8.0 接口默认实现

    原文: Default implementations in interfaces 随着上周的 .NET Core 3.0 Prview 5 和 Visual Studio 2019 version ...

  2. 【Linux命令】modprobe命令

    modprobe(module probe)命令 用于自动处理可载入模块. 1)语法 modprobe [-acdlrtvV][--help][模块文件][符号名称 = 符号值] 2)补充 modpr ...

  3. 【Offer】[62] 【圆圈中最后剩下的数字】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字. 牛客网刷题地址 ...

  4. 2019沈阳网络赛B.Dudu's maze

    https://www.cnblogs.com/31415926535x/p/11520088.html 啊,,不在状态啊,,自闭一下午,,都错题,,然后背锅,,,明明这个简单的题,,, 这题题面不容 ...

  5. Java 并发编程(二):如何保证共享变量的原子性?

    线程安全性是我们在进行 Java 并发编程的时候必须要先考虑清楚的一个问题.这个类在单线程环境下是没有问题的,那么我们就能确保它在多线程并发的情况下表现出正确的行为吗? 我这个人,在没有副业之前,一心 ...

  6. .Net基础篇_学习笔记_第七天_Continue关键字的用法

    Continue: 立即结束本次循环,判断循环条件: 如果成立,则进行下一次循环,否则退出循环. Continue和break的区别: 遇到break,循环不继续. 遇到continue,本次循环也不 ...

  7. SqlServer 2014还原数据库时提示:无法在已有的""上还原文件,请重新发出RESTORE语句,用WITH REPLACE来覆盖原先存在的文件

    场景 SQL Server 2014在还原数据库时提示: 无法在已有的""上还原文件,请重新发出RESTORE语句,用WITH REPLACE来覆盖原先存在的文件... 实现 在还 ...

  8. 用101000张食物图片实现图像识别(数据的获取与处理)-python-tensorflow框架

    前段时间,日剧<轮到你了>大火,作为程序员的我,看到了另外一个程序员—二阶堂,他的生活作息,以及饮食规律,让我感同身受,最让我感触的是他做的AI聊天机器人,AI菜品分析机器人,AI罪犯分析 ...

  9. 遇到XML-GB2312网页编码的处理方法

    报的错误:encoding error : input conversion failed due to input error, bytes  I/O error : encoder error 1 ...

  10. Linux 笔记 - 几个常用且重要的命令

    博客地址:http://www.moonxy.com Linux 系统中提供了大量的命令,从文件目录管理,用户管理,到系统监控等等,功能非常丰富,但有几个是常用且重要的命令. 1. 命令 grep 作 ...