Python可移植进程间信号量/事件

Posted

技术标签:

【中文标题】Python可移植进程间信号量/事件【英文标题】:Python portable interprocess Semaphore/Event 【发布时间】:2019-08-13 08:19:15 【问题描述】:

我正在使用Flask 创建一个网站。我的 WSGI 服务器 Gunicorn 产生多个进程。

我有一些跨进程对象(尤其是文件),我想限制在这些进程中的访问,并在它们被修改时引发事件。

选择通常是使用系统范围的互斥体/信号量和事件。

但是,我在 Python 上找不到可移植的 (Windows/Mac/Linux) 解决方案。

据我所知,multiprocessing 模块(请参阅this 问题)仅适用于由multiprocessing 模块本身产生的进程,而这些不是。 有 POSIX 信号量 also,但这些仅适用于 Linux。

有人知道更通用的解决方案吗?

【问题讨论】:

【参考方案1】:

我已经研究了一段时间,我能找到的最接近的是python文件锁定库fasteners

它在所有平台上都运行良好。它只实现系统互斥锁的问题,而不是像计数这样的信号量。我已经在一个带有整数计数器和主动等待的锁定文件中实现了我自己的计数,但这仍然很脆弱,如果其中一个进程崩溃并且没有正确更新计数,它将使系统处于错误状态。

【讨论】:

以上是关于Python可移植进程间信号量/事件的主要内容,如果未能解决你的问题,请参考以下文章

Boost.Interprocess 是不是牺牲性能来实现可移植性

在不同进程之间传递文件描述符的可移植方式

如何使python可移植?

编译可移植的python

进程间通信

Java中是不是有可移植的共享内存机制?