进程中的操作

本文介绍了Python中的进程间通信,重点讨论了锁、信号量和事件的使用,以及如何通过`multiprocessing.Queue`进行进程间数据交换。通过示例展示了加锁和信号量的区别,以及队列的创建、方法和使用场景,强调了队列在并发编程中处理数据安全和效率的重要性。
摘要由CSDN通过智能技术生成

目录

一.锁

1.1加锁

1.2信号量:一把锁配多把钥匙   from multiprocessing import Semaphore 

二.事件  from multiprocessing import Event 

三.进程间通信——队列(multiprocessing.Queue)

3.1方法介绍

1.Queue([maxsize])

2.Queue的实例q具有以下方法:

3.2队列用法

3.3子进程发送数据给父进程


 

一.锁

我们实现了程序的异步,让多个任务可以同时在几个进程中并发处理,他们之间的运行没有顺序,一旦开启也不受我们控制。尽管并发编程让我们能更加充分的利用IO资源,但是也给我们带来了新的问题。
当多个进程使用同一份数据资源的时候,就会引发数据安全或顺序混乱问题。

进程锁: 也是为了控制同一操作系统中多个进程访问一个共享资源,只是因为程序的独立性,各个进程是无法控制其他进程对资源的访问的,但是可以使用本地系统的信号量控制(操作系统基本知识)。

os.getpid () Python中的method用于获取当前进程的进程ID

1.1加锁

第一种没有加锁:

import time,os
from multiprocessing import Process,Lock

def fun(lock,n):
    # lock.acquire()
    print("我是子进程:%s 进程🆔id为:%s"%(n,os.getpid()))
    time.sleep(2)
    print("回头科科:%s 进程🆔id为:%s"%(n,os.getpid()))
    # lock.release()

if __name__ == "__main__":
    lock = Lock()
    for i in range(5):
        p = Process(target=fun,args=(lock,i,))
        p.start()
    print("我是主进程")

 第二种加锁:

代码:

import time,os
from multiprocessing import Process,Lock

def fun(lock,n):
    lock.acquire()
    print("我是子进程:%s 进程🆔id为:%s"%(n,os.getpid()))
    time.sleep(2)
    print("回头科科:%s 进程🆔id为:%s"%(n,os.getpid()))
    lock.release()

if __name__ == "__main__":
    lock = Lock()
    for i in range(5):
        p = Process(target=fun,args=(lock,i,))
        p.start()
    print("我是主进程")

 使用加锁的形式实现了顺序的执行

1.2信号量:一把锁配多把钥匙   from multiprocessing import Semaphore 

代码:

1.

from multiprocessing import Semaphore
l = Semaphore(3)
l.acquire()
print(1)
l.acquire()
print(2)
l.acquire()
print(3)
# l.release()
l.acquire()
print(4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值