码迷,mamicode.com
首页 > 其他好文 > 详细

5.1.7 互斥锁

时间:2018-06-16 15:08:42      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:col   执行   tar   src   img   进程   time   bsp   class   

进程之间内存是独立的,但其他资源是共享的,如可以操作同一个文件。

 

没有互斥锁的情况下,以下执行结果:

from multiprocessing import Process
import time

def task(name):
    print(%s 1 %name)
    time.sleep(1)
    print(%s 2 %name)
    time.sleep(1)
    print(%s 3 %name)

if __name__ == __main__:
    for i in range(3):
        p=Process(target=task,args=(进程%s %i,))
        p.start()

输出:

技术分享图片
进程0 1
进程1 1
进程2 1
进程0 2
进程1 2
进程2 2
进程0 3
进程1 3
进程2 3
View Code

 

加互斥锁:

from multiprocessing import Process
from multiprocessing import Lock # 要导入Lock
import time


def task(name, multi_lock):
    multi_lock.acquire()  # 获得锁
    print(%s 1 %name)
    time.sleep(1)
    print(%s 2 %name)
    time.sleep(1)
    print(%s 3 %name)
    multi_lock.release()  #释放锁


if __name__ == __main__:
    multi_lock = Lock()  # 子进程会拷贝相同的内存,就会变成独立的锁,所以应该作为参数传给子进程
    for i in range(3):
        p = Process(target=task, args=(进程%s % i, multi_lock))
        p.start()

# 互斥锁牺牲效率来保证数据不错乱
输出:

进程0 1
进程0 2
进程0 3
进程1 1
进程1 2
进程1 3
进程2 1
进程2 2
进程2 3

 

 

5.1.7 互斥锁

标签:col   执行   tar   src   img   进程   time   bsp   class   

原文地址:https://www.cnblogs.com/beallaliu/p/9190443.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!