函数在fork()完成任务之前返回值

时间:2014-07-03 21:22:21

标签: python fork

我有一个函数,在其中我正在使用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'完成迭代之前。 我陷入困境,完全不知道为什么会发生这种情况......我做错了什么?

1 个答案:

答案 0 :(得分:1)

无论如何,此代码将始终返回空列表。 fork创建一个新进程,它不与父进程共享内存。也就是说,每个子进程都修改自己的t列表副本。您需要使用进程间通信来实际更新父进程中的t。