python多进程无法正常完成

2024-09-27 21:28:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题是完成子进程,我使用多进程库并且在一台机器上有返回或退出行,进程在连接之前死亡,但在另一台机器上没有。过程总是在增长,但在完成任务后,它们都不会完成。在这两台机器中,python的版本都是2.7.3rc2。在

semaphore_processes_limit = BoundedSemaphore(value=PROCS_LIMIT)

# Starting searches
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()

# Process
def searching(word):
return # or exit(0)

谢谢。在


Tags: in版本机器forsearching进程value过程
3条回答

最后是服务器错误,但我不知道是什么。在

在这里,我写了kugg的示例,其中包含信号量的释放,以便可以使用较低的PROCS_限制:

from multiprocessing import *

PROCS_LIMIT = 2
semaphore_processes_limit = BoundedSemaphore(value=PROCS_LIMIT)

# Process
def process(word):
    print(word)
    semaphore_processes_limit.release()
    return

# Starting searches
words = ["foo", "bar", "baz", "buz", "biz"]
procs = []
for word in words:
    semaphore_processes_limit.acquire()
    p = Process(target=process, args=(word,))
    procs.append(p)
    p.start()

# Wait for all worker processes to finish
for p in procs:
    p.join()

服务器有12个CPU(Intel(R)Core(TM)i7-3930K CPU@3.20GHz,1200 MHz),并安装了GNU/Linux Debian Weezy。在

我暂时的丑陋解决方案是:

os.kill(os.getpid(), 9)

嗨,我试着在这两台机器上重现同样的问题:

Python2.6.7(r267:888502012年2月2日,23:50:20)Cygwin on Vista

Python2.7.3(默认值,2012年8月1日,05:16:07)Ubuntu 12.04

它们都在p.join()之后正常完成。在

解释素1: 但是,如果我把PROCS_限制降低到小于len(单词)的数字,最后一个进程就不能完成。在

说明2: 信号量可以在不同的主机操作系统上进行不同的处理。从而产生不同的结果。 请参阅本页顶部的警告:http://docs.python.org/2/library/multiprocessing.html

以前,我在Cygwin上的python中遇到过子进程模块的问题,因为缺少线程支持。在

你能描述一下你正在运行的机器类型和操作系统吗?在

这是我对您的代码所做的修改以使其运行:

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()

相关问题 更多 >

    热门问题