进程锁

作者: 测试探索 | 来源:发表于2022-01-31 10:02 被阅读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

相关文章

  • 进程学习三

    进程进阶 1.进程锁 这里的进程锁与线程锁、互斥量、读写锁和自旋锁不同,它是通过记录一个PID文件,避免两个进程同...

  • Python3.x:进程锁与进程池

    进程锁 上篇说了不需要加进程锁,但是这里还是要了解一下进程锁,因为在python2中,进程加锁还是很有必要的 注意...

  • 进程锁

    在同一时间使用多个进程同时运行,可能导致反馈数据顺序是乱的,为保证得到理想的数据顺序,就需要添加一把锁以控制数据的...

  • 进程锁

    spawn模式下的第一种方式 spawn模式的第二种方式 fork模式 fork模式不需要特殊处理

  • oracle杀掉锁表会话

    查看锁表进程SQL语句1: 查看锁表进程SQL语句2: 杀掉锁表进程:如有記錄則表示有lock,記錄下SID和se...

  • python之多线程与多进程入门

    python之多线程与多进程 关键词: GIL锁,IO繁忙,线程安全,线程同步,进程池,进程通信,队列 GIL锁;...

  • multiprocessing模块-多进程知识点

    多进程代码 方法 属性 多进程锁 多进程的信号量 这个跟锁的用法差不多,差别就是能够设置钥匙的数量,即进程的数量,...

  • 锁的分类

    就锁的使用场景可以分为进程锁和线程锁。很明显,一种用于线程、一种用于进程。 多核处理器下,会存在多个进程处于内核态...

  • 数据机房的几种“锁”

    此锁非彼锁,今天介绍几种数据锁。 1、文件锁 当多个进程可能会对同样的数据执行操作时,这些进程需要保证其它进...

  • APUE读书笔记-13守护进程(5)

    6、守护进程遵循的一些标准 Unix上面的守护进程,一般会遵循如下的通用标准: 如果守护进程使用锁文件,那么锁文件...

网友评论

      本文标题:进程锁

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