我在Python中有一个脚本,该脚本使用的资源无法通过运行的一定数量的并发脚本使用。

从经典上讲,这将由命名的信号量解决,但我找不到文档中的那些 多处理 模块或 线程 .

我是否缺少某些东西或名为未由Python实施 /暴露的信号量?更重要的是,如果答案是否定的,那么效仿一个的最佳方法是什么?

谢谢,博阿兹

PS。由于与这个问题无关的原因,我无法将任务汇总到连续运行的过程/守护程序或使用产卵过程的过程中 - 似乎两者都可以与Python API合作。

有帮助吗?

解决方案

我建议这样的第三方扩展 这些, ,理想情况下 posix_ipc 一个 - 特别是 Sempahore 文档中的部分。

这些模块主要是关于以单一的方式公开“系统V IPC”(包括信号量),但至少有一个(posix_ipc 特别是)声称在Windows上与Cygwin合作(我尚未验证该主张)。有一些记录 限制 在FreeBSD 7.2和Mac OSX 10.5上,因此请注意这些平台对您很重要。

其他提示

您可以使用文件系统而不是内核路径来模拟它们(无论如何,命名信号量是在某些平台上实现的)。您必须实施 sem_[open|wait|post|unlink] 您自己,但是这样做应该相对琐碎。您的同步开销可能很重要(取决于您必须在应用程序中使用信号量的频率),因此,当您启动流程以存储名为Smaphores的过程时,您可能需要初始化RamDisk。

另外,如果您不舒服自己滚动,则可能会包裹 boost::interprocess::named_semaphore (文档在这里)在一个简单的扩展模块中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top