我有一个函数,在其中我正在使用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'完成迭代之前。 我陷入困境,完全不知道为什么会发生这种情况......我做错了什么?
答案 0 :(得分:1)
无论如何,此代码将始终返回空列表。 fork创建一个新进程,它不与父进程共享内存。也就是说,每个子进程都修改自己的t列表副本。您需要使用进程间通信来实际更新父进程中的t。