擅长:python、mysql、java
<p>嗨,我试着在这两台机器上重现同样的问题:</p>
<p>Python2.6.7(r267:888502012年2月2日,23:50:20)Cygwin on Vista</p>
<p>Python2.7.3(默认值,2012年8月1日,05:16:07)Ubuntu 12.04</p>
<p>它们都在p.join()之后正常完成。在</p>
<p>解释素1:
但是,如果我把PROCS_限制降低到小于len(单词)的数字,最后一个进程就不能完成。在</p>
<p>说明2:
信号量可以在不同的主机操作系统上进行不同的处理。从而产生不同的结果。
请参阅本页顶部的警告:<a href="http://docs.python.org/2/library/multiprocessing.html" rel="nofollow">http://docs.python.org/2/library/multiprocessing.html</a></p>
<p>以前,我在Cygwin上的python中遇到过子进程模块的问题,因为缺少线程支持。在</p>
<p>你能描述一下你正在运行的机器类型和操作系统吗?在</p>
<p>这是我对您的代码所做的修改以使其运行:</p>
<pre><code>from multiprocessing import *
from threading import *
# Process
def searching(word):
print(word)
return # or exit(0)
PROCS_LIMIT = 5
semaphore_processes_limit = BoundedSemaphore(value=PROCS_LIMIT)
# Starting searches
words = ["foo", "bar", "baz", "buz", "biz"]
procs = []
for word in words:
semaphore_processes_limit.acquire()
p = Process(target=searching, args=(word,))
procs.append(p)
p.start()
# Wait for all worker processes to finish
for p in procs:
p.join()
</code></pre>