python中子进程之间共享锁
我想知道如何在python子进程之间共享锁,下面是一个简单的示例,说明了我想做什么(这不起作用:) 文件1python中子进程之间共享锁,python,subprocess,shared-memory,locks,Python,Subprocess,Shared Memory,Locks,我想知道如何在python子进程之间共享锁,下面是一个简单的示例,说明了我想做什么(这不起作用:) 文件1 import posix_ipc import pickle import multiprocessing as mp flag = (posix_ipc.O_CREAT | posix_ipc.O_TRUNC | posix_ipc.O_RDWR) mem = posix_ipc.SharedMemory("Mem", flags=flag, size=200) m
import posix_ipc
import pickle
import multiprocessing as mp
flag = (posix_ipc.O_CREAT | posix_ipc.O_TRUNC | posix_ipc.O_RDWR)
mem = posix_ipc.SharedMemory("Mem", flags=flag, size=200)
mem = mmap.mmap(mem.fd, 200, mmap.MAP_SHARED, mmap.PROT_WRITE)
m = mp.Manager()
lock = m.Lock()
B_lock = pickle.dumps(lock)
B_len=len(B_lock)
mem[0:B_len]=B_lock
print(B_len)
length=int(input("enter the length"))
lock=pickle.loads(mem[0:length])
print(lock)
input()
from ilock import ILock
print("start this process first")
lock = ILock("VoidLock")
with lock:
print("now this process inside, run the other procsses")
input("enter anything so the other procsses can get inside the lock")
print("the lock is relased")
input()
文件2
import posix_ipc
import multiprocessing as mp
import pickle
flag = 0
mem = posix_ipc.SharedMemory("Mem", flags=flag, size=200)
mem = mmap.mmap(mem.fd, 200, mmap.MAP_SHARED, mmap.PROT_WRITE)
length=int(input("enter the length"))
lock=pickle.loads(mem[0:length])
print(lock)
input()
from ilock import ILock
lock = ILock("VoidLock")
print("now this process is witting")
with lock:
print("now this process is inside ")
input()
input()
共享内存工作得很好,但当我共享锁时,会收到以下错误消息
文件“/usr/lib/python3.8/multiprocessing/connection.py”,第759行,在答案中
raise AuthenticationError('发送的摘要被拒绝')
multiprocessing.context.AuthenticationError:发送的摘要被拒绝,多亏了这一点
我从中得到的是我想要的是一个系统范围的互斥,你可以通过使用ilock来实现,这是我的例子
文件1
import posix_ipc
import pickle
import multiprocessing as mp
flag = (posix_ipc.O_CREAT | posix_ipc.O_TRUNC | posix_ipc.O_RDWR)
mem = posix_ipc.SharedMemory("Mem", flags=flag, size=200)
mem = mmap.mmap(mem.fd, 200, mmap.MAP_SHARED, mmap.PROT_WRITE)
m = mp.Manager()
lock = m.Lock()
B_lock = pickle.dumps(lock)
B_len=len(B_lock)
mem[0:B_len]=B_lock
print(B_len)
length=int(input("enter the length"))
lock=pickle.loads(mem[0:length])
print(lock)
input()
from ilock import ILock
print("start this process first")
lock = ILock("VoidLock")
with lock:
print("now this process inside, run the other procsses")
input("enter anything so the other procsses can get inside the lock")
print("the lock is relased")
input()
文件2
import posix_ipc
import multiprocessing as mp
import pickle
flag = 0
mem = posix_ipc.SharedMemory("Mem", flags=flag, size=200)
mem = mmap.mmap(mem.fd, 200, mmap.MAP_SHARED, mmap.PROT_WRITE)
length=int(input("enter the length"))
lock=pickle.loads(mem[0:length])
print(lock)
input()
from ilock import ILock
lock = ILock("VoidLock")
print("now this process is witting")
with lock:
print("now this process is inside ")
input()
input()
你试过posix_ipc中的命名信号灯吗?不,我想在我的项目中使用锁,但有趣的是,当我开始搜索如何使用posix_ipc信号量时,我发现了关于ilock的信息。使用ilock的界面也很有趣。它更具肾盂功能,更易于使用。