为什么此队列在多处理中不起作用?(函数体中的append()方法)

时间:2019-06-20 06:51:21

标签: python multiprocessing queue python-multiprocessing

我正在努力构建具有多处理功能的脚本。 但是在实现队列时,我发现它无法按预期工作,并且仍然不知道为什么。

这是我的伪代码,由三部分组成: 从字符串制作句子列表的功能, 用于附加句子的字符串列表和结果列表, 以及实现队列和多处理的主要代码。

def process_string(que_object):

    while que_object.empty():
       time.sleep(2)

    q = que_object.get(timeout=2)
    sentence = "Here is your string_"+q
    print(sentence)
    final_sentence.append(sentence)

strings =["alskfj","alksjf"...]
final_sentences = []

if __name__ == "__main__":

    que_object = Queue()
    for i in strings:
        que_object.put(strings[strings.index(i)])
        #print(strings[strings.index(i)])
    #print(que_object)

    with Manager() as manager:
        L = manager.list(strings)
        process_list =[]
        for i in range(2):
            p = Process(target =process_string,args=(que_obejct,))
            process_list.append(p)
            p.start()
        for i in range(2):

            p.join()
            #time.sleep(1)
        print(final_sentences)

1 个答案:

答案 0 :(得分:1)

顾名思义,

multiprocessing.Process是独立的OS级进程。因此,当您执行final_sentence.append时,这是在另一个进程的内存/地址空间中完成的,因此对于执行print(final_sentences)的进程来说是不可见的

我建议像第一个示例in the docs一样,使用Poolmap对您的数据使用函数。