我正在努力构建具有多处理功能的脚本。 但是在实现队列时,我发现它无法按预期工作,并且仍然不知道为什么。
这是我的伪代码,由三部分组成: 从字符串制作句子列表的功能, 用于附加句子的字符串列表和结果列表, 以及实现队列和多处理的主要代码。
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)
答案 0 :(得分:1)
multiprocessing.Process
是独立的OS级进程。因此,当您执行final_sentence.append
时,这是在另一个进程的内存/地址空间中完成的,因此对于执行print(final_sentences)
的进程来说是不可见的
我建议像第一个示例in the docs一样,使用Pool
和map
对您的数据使用函数。