Python中的命名信号量?
我有一个用Python写的脚本,它使用了一种资源,但这个资源不能被同时运行的多个脚本过多地使用。
通常情况下,这种问题可以通过命名信号量来解决,但我在multiprocessing模块和threading模块的文档中找不到相关内容。
我是不是漏掉了什么,还是Python根本没有实现或提供命名信号量?更重要的是,如果答案是否定的,模拟一个的最佳方法是什么?
谢谢,
Boaz
PS:由于一些与这个问题不太相关的原因,我不能把任务聚合到一个持续运行的进程/守护进程中,也不能使用生成的进程——这两种方式似乎都可以在Python API中实现。
2 个回答
0
你可以通过使用文件系统来模拟它们,而不是使用内核路径(在某些平台上,命名信号量就是这样实现的)。你需要自己实现 sem_[open|wait|post|unlink]
这些功能,但其实这并不复杂。需要注意的是,你的同步开销可能会比较大(这取决于你在应用程序中需要多频繁地操作信号量),所以你可能想在启动进程时初始化一个内存磁盘,用来存储命名信号量。
另外,如果你不想自己动手实现,可以考虑把 boost::interprocess::named_semaphore
(这里有文档)封装成一个简单的扩展模块。