多进程- 锁、信号量、事件

2018-12-08  本文已影响0人  冬至是条狗

multiprocessing

进程锁

使用进程锁可以保证同一个数据只能被一个进程访问和修改,但每次使用完要记得释放锁

为了数据安全,在多进程修改数据库时使用锁,降效保证数据安全,而查看则不需要加锁

lock = multiprocessing.Lock() # 创建一个锁对象
lock.acquire()  # 获得锁的使用权
lock.release()  # 释放锁的使用权

信号量

可以理解为同一段代码同一时间的使用数量,需要在进程创建时将对象传入,使用时与进程锁类似

sem = multiprocessing.Semaphore(x)    # x为控制的数量

事件

一个信号可以使所有的进程都进入阻塞状态,也可以使所有的进程接触阻塞。

事件被创建后默认为阻塞状态

e = multiprocessing.Event()

事件可以作为进程之间互相控制的开关,例程: 红绿灯

import multiprocessing
import time
import random

# 起一个进程控制红绿灯

class Light(multiprocessing.Process):
    def __init__(self, e):
        super().__init__()
        self.e = e

    def run(self):
        while True:
            print("绿灯亮了,可以走")
            e.clear()
            time.sleep(2)
            print("红灯亮了,停")
            e.set()
            time.sleep(2)


def car(e):
    while True:
        if e.is_set():
            e.wait()
            print("车辆等待")
        else:
            print("车辆通过")
        time.sleep(random.random())


if __name__ == '__main__':
    e = multiprocessing.Event()
    light_p = Light(e)
    light_p.daemon = True
    light_p.start()
    e.set()
    car(e)
上一篇下一篇

猜你喜欢

热点阅读