进程锁

2022-01-31  本文已影响0人  测试探索

spawn模式下的第一种方式

import time
import multiprocessing

def task(lock):
    print("开始")
    lock.acquire()
    #假设文件中保存的内容就是一个值:10
    with open ("f1.txt",mode = "r",encoding = "utf-8") as f:
        current_num = int(f.read())

    print("排队抢票了")
    time.sleep(0.5)
    current_num -= 1
    with open("f1.txt",mode = "w",encoding = "utf-8") as f:
        f.write(str(current_num))
    lock.release()


if __name__ == '__main__':
    multiprocessing.set_start_method("spawn")
    lock = multiprocessing.RLock() #进程锁
    for i in range(10):
        p = multiprocessing.Process(target=task,args = (lock,))
        p.start()

    #spawn模式,需要特殊处理
    time.sleep(7)
image.png

spawn模式的第二种方式

import time
import multiprocessing

def task(lock):
    print("开始")
    lock.acquire()
    #假设文件中保存的内容就是一个值:10
    with open ("f1.txt",mode = "r",encoding = "utf-8") as f:
          current_num = int(f.read())

    print("排队抢票了")
    time.sleep(0.5)
    current_num -= 1
    with open("f1.txt",mode = "w",encoding = "utf-8") as f:
        f.write(str(current_num))
    lock.release()


if __name__ == '__main__':
    multiprocessing.set_start_method("spawn")
    lock = multiprocessing.RLock() #进程锁

    process_list = []
    for i in range(10):
        p = multiprocessing.Process(target=task,args = (lock,))
        #把所有进程都丢给cpu运行
        p.start()
        process_list.append(p)
    #spawn模式,需要特殊处理
    for item in process_list:
        item.join()
image.png

fork模式

fork模式不需要特殊处理

import time
import multiprocessing

def task(lock):
    print("开始")
    lock.acquire()
    #假设文件中保存的内容就是一个值:10
    with open ("f1.txt",mode = "r",encoding = "utf-8") as f:
          current_num = int(f.read())

    print("排队抢票了")
    time.sleep(0.5)
    current_num -= 1
    with open("f1.txt",mode = "w",encoding = "utf-8") as f:
        f.write(str(current_num))
    lock.release()


if __name__ == '__main__':
    multiprocessing.set_start_method("fork")
    lock = multiprocessing.RLock() #进程锁

    process_list = []
    for i in range(10):
        p = multiprocessing.Process(target=task,args = (lock,))
        #把所有进程都丢给cpu运行
        p.start()
        process_list.append(p)
image.png
上一篇 下一篇

猜你喜欢

热点阅读