查询:Python中有没有办法说:
不要将/dev/shm
用于共享内存存储,而应使用其他一些临时位置,例如/tmp
。要么
代替multiprocessing.SemLock
使用threading.Lock
进行同步(如果可行且不逻辑)。
背景:
我正在运行到OSError : Function not implemented error的ESX(系统管理程序)上运行一个简单的multiprocessing.Pool
示例。
在StackOverflow上对此问题的其他提及(here和here)指出,当未安装/dev/shm
时会发生此问题。因此,_multiprocessing.SemLock
无法创建同步锁。
对我来说实际上是这样,因为ls -lrt /dev/shm
对我来说失败了。但是我不能尝试上述链接上推荐的解决方案mount
,因为我正在运行的平台(ESX / VMKernel)上未实现安装命令。
VM不是持久性的,并且/etc/fstab
在关闭本身时会被冲走。
因此,我正在寻找使用threading.Lock()进行同步或要求Python不要使用/dev/shm/
进行同步的方法。
最佳答案
如果尝试在两个threading.Lock
进程中使用multiprocessing
对象,则两个Lock
对象将不会链接。 threading.Lock
依赖于2个Thread
将在同一内核上运行并共享文件描述符和GIL的事实。 2 Process
不是这种情况。
模块_multiprocessing.semaphore
依赖于操作系统pthread.sem_open
来创建SemLock
对象。这意味着主要问题是:在ESX上是否实现了某些OS信号?如果存在,则可以使用SemLock
和loky.backend.semlock的灵感来实现自己的ctypes
对象,从而可以访问内部pthread
原语。
请注意,可能需要进行大量工作才能确保SemLock与multiprocessing
模块正确使用。解决方案可能是使用loky
的修改版本,如果您成功在ESX上实现了该修改,请使用此SemLock
。