查询: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)上未实现mount命令。
虚拟机不是持久性的,/etc/fstab
在关闭时会被冲走。
所以我正在寻找使用threading.Lock()进行同步的方法,或者让Python不要使用/dev/shm/
进行同步。
答案 0 :(得分:2)
如果您尝试在两个threading.Lock
进程中使用multiprocessing
对象,则不会链接两个Lock
对象。 threading.Lock
依赖于2 Thread
将在同一核心上运行并共享文件描述符和GIL的事实。 2 Process
不是这种情况。
模块_multiprocessing.semaphore
依赖于操作系统pthread.sem_open
来创建SemLock
对象。这意味着主要问题是:ESX上是否实现了一些操作系统信号量?如果有,您可以使用SemLock
和loky.backend.semlock的灵感来实现自己的ctypes
对象,这样您就可以访问内部pthread
原语。
请注意,确保SemLock与multiprocessing
模块正确使用可能需要大量工作。解决方案可能是使用loky
的修改版本,如果您成功在ESX上实现它,则使用此SemLock
。