1 进程锁

python编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。

每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一线程访问对象。

在python中我们使用 multiprocessing.Lock 和 threading.Lock 可以实现进程锁控制。

2 示例

2.1 acquire()加锁

from multiprocessing import Lock

lock = Lock()

lock.acquire() #加锁

lock.acquire()#此时阻塞在该函数处

print("lock...")

运行,并没有打印出lock...,函数阻塞。

当一个进程加锁,另外一个进程也加锁时,则会发生此函数运行阻塞。

当一个进程加锁,另外一个进程不加锁时,则另一个函数没有任何限制。

2.2 release()解锁

from multiprocessing import Lock

lock = Lock()

lock.acquire()

lock.release()

print("lock...")

运行:输出 lock...

2.3 加锁与解锁之间的区别

lock.release()解锁后显示

from multiprocessing import Lock

lock = Lock()

lock.acquire()

lock.release()

# lock.acquire()

with lock:
    print("lock...")

运行:

lock...

lock.acquire()加锁后显示

from multiprocessing import Lock

lock = Lock()

lock.acquire()

lock.release()

lock.acquire()

with lock:
    print("lock...")

运行,一直处于阻塞状态,没有输出

此时运行,阻塞在with语句,with 语句运行完毕会自动解锁

2.4 综合应用

from multiprocessing import Process,Lock
import sys,time 

def worker1(stream):
    lock.acquire()
    for i in range(5):
        time.sleep(1)
        stream.write('Lock acquired via\n')
    lock.release()

def worker2(stream):
    with lock:
        for i in range(5):
            time.sleep(1)
            stream.write("lock acquired directly\n")

lock = Lock()

w1 = Process(target = worker1,args = (sys.stdout,))
w2 = Process(target = worker2,args = (sys.stdout,))

w1.start()
w2.start()

w1.join()
w2.join()

worker1 和worker2 都加锁时,两个进程会顺序执行,也即运行完成一个进程再运行第二个进程;当两个进程中最多只有一个进程加锁时,则不会出现进程阻塞的情况。

两个子进程的运行前后不区分,但是一旦一个子程序运行,另一个子程序就会被阻塞,但具体那个子程序先运行,不能完全确定

python学习笔记——多进程中的锁Lock的更多相关文章

  1. python学习笔记——多进程中共享内存Value & Array

    1 共享内存 基本特点: (1)共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝. (2)为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将 ...

  2. python学习笔记—— 多进程中的 孤儿进程和僵尸进程

    1 基本概述 1.1 孤儿进程和僵尸进程 父进程创建子进程后,较为理想状态是子进程结束,父进程回收子进程并释放子进程占有的资源:而实际上,父子进程是异步过程,两者谁先结束是无顺的,一般可以通过父进程调 ...

  3. Python 学习笔记 多进程 multiprocessing--转载

    本文链接地址 http://quqiuzhu.com/2016/python-multiprocessing/ Python 解释器有一个全局解释器锁(PIL),导致每个 Python 进程中最多同时 ...

  4. python 学习笔记 多进程

    要让python程序实现多进程,我们先了解操作系统的相关知识 Unix/Linux操作系统提供了一个fork()系统调用,他非常特殊,普通的函数调用,调用一次,返回一次,但是fork调用一次, 返回两 ...

  5. python学习笔记-多进程

    multiprocessing from multiprocessing import Process import time def f(name): time.sleep(2) print('he ...

  6. Python学习笔记6-Python中re(正则表达式)模块学习

    今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍Python中常用的正则表达式处理函数. re.match re.match 尝试从 ...

  7. python学习笔记——爬虫中提取网页中的信息

    1 数据类型 网页中的数据类型可分为结构化数据.半结构化数据.非结构化数据三种 1.1 结构化数据 常见的是MySQL,表现为二维形式的数据 1.2 半结构化数据 是结构化数据的一种形式,并不符合关系 ...

  8. python学习笔记——多进程二 进程的退出

    1 进程的退出函数的基础语法 1.1 进程的退出函数 进程的退出含有有os._exit([status])和sys.exit([status])两种,从数据包来看,该退出模块仅在linux或者unix ...

  9. python学习笔记——多进程一 基础概念

    1 进程 进程:程序的一次(从开始到结束)执行过程,属于一个动态过程.是系统进行资源分配和调度的基本单位. 程序:指的是一个文件,磁盘中可执行的代码.属于一个静态文件 注:进程运行时需要把程序加载如内 ...

随机推荐

  1. Why游戏作品合集

    之前曾经发过一个套WhyEngine游戏作品合集,里面有十几个小游戏和若干个屏保程序和若干个DEMO程序.而这次发的与上次不一样,因为这是我花了两天时间将所有的程序集成到一个工程后的成果.为了能将所有 ...

  2. go语言基础之指针做函数参数

    1.指针做函数参数 示例: package main //必须有个main包 import "fmt" func swap(a, b int) { a, b = b, a fmt. ...

  3. JQuery巧妙利用CSS操作打印样式

    一.添加打印样式 1. 为屏幕显示和打印分别准备一个css文件,如下所示:  用于屏幕显示的css: <link rel="stylesheet" href="cs ...

  4. 创建spring boot项目启动报错遇到的问题

    1.Spring boot,Mybatis 启动报错 Failed to auto-configure a DataSource *************************** APPLICA ...

  5. Redis自学笔记 --string类型

    string类型                                                                                  set 赋值 get ...

  6. 数字签名算法(C#)

    public static string GetSHA1Method(string strSource) { string strResult = ""; //Create Sys ...

  7. 思维导图软件xmind和mindmanager哪个更好

    思维导图是一种将放射性思考具体化的方法,可以将人们的创造性思维及时捕捉并呈现,目前便捷的网络为人们带来了众多的思维导图软件,而在这些软件中只有亲身实践体验过,才能知道到底思维导图哪个好,哪个又适合自己 ...

  8. python下载文件的三种方法

    Python开发中时长遇到要下载文件的情况,最常用的方法就是通过Http利用urllib或者urllib2模块. 当然你也可以利用ftplib从ftp站点下载文件.此外Python还提供了另外一种方法 ...

  9. C#.Net中操作XML方法一

    我们知道XML是一种可标记性的语言,用来标记数据.定义数据类型,是一种执行用户对自己的标记语言进行定义的源语言.由于结构好.而且easy理解,就好比一棵树,层次关系分明,因此也经常把一些数据存储到XM ...

  10. 算法笔记_125:算法集训之编程大题集一(Java)

     目录 1 砝码称重 2 公式解析 3 购物券消费方案 4 机器人行走 5 角谷步数 6 矩形区域的交和并 7 矩阵变换加密法 8 控制台表格 9 拉丁方块填数字 10 立方和等式   1 砝码称重 ...