美文网首页python并发
6. python多进程信号量-Semaphore

6. python多进程信号量-Semaphore

作者: 花间派I风月 | 来源:发表于2018-12-26 22:07 被阅读6次

一、简述

信号量Semaphore是一个计数器,控制对公共资源或者临界区域的访问量,信号量可以指定同时访问资源或者进入临界区域的进程数。每次有一个进程获得信号量时,计数器-1,若计数器为0时,其他进程就停止访问信号量,一直阻塞直到其他进程释放信号量。


二、常用方法和属性

  • acquire(blocking = True, timeout=None)
    • 请求一个信号量
  • release()
    • 释放一个信号量

三、示例

import time, random
from multiprocessing import Process, Semaphore

def ktv(i, sem):
    sem.acquire()
    print('%s 走进ktv' %i)
    time.sleep(random.randint(1, 5))
    print('%s 走出ktv' %i)
    sem.release()

if __name__ == "__main__":
    sem = Semaphore(4)
    for i in range(5):
        p = Process(target=ktv, args=(i, sem))
        p.start()

运行结果

0 走进ktv
3 走进ktv
4 走进ktv
1 走进ktv
1 走出ktv
2 走进ktv
2 走出ktv
0 走出ktv
3 走出ktv
4 走出ktv

Process finished with exit code 0

示例说明:

  • Semaphore 主要用于控制对公共资源或者临界区域访问量的场景。
  • 这个示例中ktv有4个包间,来了5个人。这时候就使用Semaphore来控制访问量了。只能同时允许4个人进入包间,第5个人只有等先进入的4个人中有人出来时才可以进入。

相关文章

网友评论

    本文标题:6. python多进程信号量-Semaphore

    本文链接:https://www.haomeiwen.com/subject/vcgklqtx.html