13

我在 python 中有一个脚本,它使用的资源不能被超过一定数量的并发脚本运行使用。

经典地,这将通过命名信号量来解决,但我在multiprocessing模块或threading的文档中找不到这些。

我是否遗漏了某些东西或被命名为 Python 未实现/公开的信号量?更重要的是,如果答案是否定的,那么效仿的最佳方法是什么?

谢谢,波阿斯

PS。由于与这个问题不太相关的原因,我无法将任务聚合到持续运行的进程/守护进程或使用衍生的进程——这两者似乎都可以与 python API 一起使用。

4

2 回答 2

4

我建议像这样的第三方扩展,理想情况下是那个posix_ipc——特别是看文档中的信号部分。

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

于 2010-05-10T00:16:25.640 回答
0

您可以通过使用文件系统而不是内核路径来模拟它们(无论如何,命名信号量在某些平台上都是以这种方式实现的)。您必须sem_[open|wait|post|unlink]自己实现,但这样做应该相对简单。您的同步开销可能很大(取决于您必须在应用程序中调整信号量的频率),因此您可能希望在启动存储命名信号量的进程时初始化 ramdisk。

或者,如果您不喜欢自己滚动,您可以将boost::interprocess::named_semaphore此处的文档)包装在一个简单的扩展模块中。

于 2010-05-09T19:08:46.363 回答