【发布时间】:2014-08-25 03:43:12
【问题描述】:
我有一个函数,我在其中使用 os.fork():
def translating(words):
'''Translate words using API'''
number_of_threads = 3
t = [] #list to store translated words
l = len(words_words)
n = (l - (l % number_of_threads)) / number_of_threads #number of words for each PID I will create
for thread_number in range(number_of_threads):
pid = os.fork()
if pid != 0:
'''print('Process {0} spawned' .format(pid))'''
else:
for i in words[thread_number*n:thread_number*n+n]: #slice of words for each PID
translation = translate.translate(i, 'en')['text'] #API returns list of translated words
for a in translation:
t.append(a)
os._exit(0)
return t
我的问题是'return t' 发生在第二个(来自 3 个)PID 创建之后。在“for-loops”完成迭代之前。 我卡住了,完全不知道为什么会发生这种情况......我做错了什么?
【问题讨论】:
-
您必须使用
os.wait()等待孩子完成。否则,这两个进程独立运行。 -
在此处查看 Multiple Forks 示例:petercollingridge.co.uk/blog/running-multiple-processes-python
-
谢谢 Barmar,您的建议帮助了我,并且在实现 os.waitpid() 之后,我的函数不会在所有 pid 完成工作之前停止。但是正如下面的user2040251所说,我得到的列表是空的,他是绝对正确的,我之前没有提到过。所以我会尽我所能在孩子和父母之间分享数据。再次感谢您!