【发布时间】:2014-03-23 20:20:13
【问题描述】:
我试图在我的程序中同时做一些事情并限制同时打开的进程数 (10)。
from multiprocessing import Process
from threading import BoundedSemaphore
semaphore = BoundedSemaphore(10)
for x in xrange(100000):
semaphore.acquire(blocking=True)
print 'new'
p = Process(target=f, args=(x,))
p.start()
def f(x):
... # do some work
semaphore.release()
print 'done'
前 10 个进程启动并正确结束(我在控制台上看到 10 个“新”和“完成”),然后什么也没有。我没有看到另一个“新”,程序只是挂在那里(而且 Ctrl-C 也不起作用)。怎么了?
【问题讨论】:
-
为什么不直接使用
multiprocessing.Pool? -
是什么让您认为
threading.BoundedSemaphore的release会跨越进程边界? -
@Thanatos 信号量是一个全局对象,acquire 应该是阻塞的,如文档中所述;我错过了什么吗?
-
@g.d.d.c 注意到,我试过了,我很满意,但我仍然想知道为什么这不起作用
标签: python multithreading semaphore