【发布时间】:2020-12-01 15:47:26
【问题描述】:
我想知道如何在 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)
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()
文件 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()
共享内存完美运行,但当我共享锁时,我收到以下错误消息
文件“/usr/lib/python3.8/multiprocessing/connection.py”,第 759 行,在 answer_challenge 中 raise AuthenticationError('摘要发送被拒绝') multiprocessing.context.AuthenticationError:发送的摘要被拒绝
【问题讨论】:
-
您是否尝试过在 posix_ipc 中命名信号量? semanchuk.com/philip/posix_ipc/#semaphore
-
不,我想在我的项目中使用锁,但有趣的是,当我开始搜索如何使用 posix_ipc 信号量时,我发现了 ilock
-
使用ilock的界面也很有意思。它更 Python 且更易于使用。
标签: python subprocess shared-memory locks