查询:Python中有没有办法说:


不要将/dev/shm用于共享内存存储,而应使用其他一些临时位置,例如/tmp。要么
代替multiprocessing.SemLock使用threading.Lock进行同步(如果可行且不逻辑)。


背景:

我正在运行到OSError : Function not implemented error的ESX(系统管理程序)上运行一个简单的multiprocessing.Pool示例。

在StackOverflow上对此问题的其他提及(herehere)指出,当未安装/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信号?如果存在,则可以使用SemLockloky.backend.semlock的灵感来实现自己的ctypes对象,从而可以访问内部pthread原语。

请注意,可能需要进行大量工作才能确保SemLock与multiprocessing模块正确使用。解决方案可能是使用loky的修改版本,如果您成功在ESX上实现了该修改,请使用此SemLock

09-10 14:24