[英]Python multiprocessing is not giving expected results
我是使用 python 进行多处理的新手,我正在学习一门课程,我发现代码不像他们在教程中所说的那样工作。 例如:
这段代码:
import multiprocessing
# empty list with global scope
result = []
def square_list(mylist):
"""
function to square a given list
"""
global result
# append squares of mylist to global list result
for num in mylist:
result.append(num * num)
# print global list result
print("Result(in process p1): {}".format(result))
if __name__ == "__main__":
# input list
mylist = [1,2,3,4]
# creating new process
p1 = multiprocessing.Process(target=square_list, args=(mylist,))
# starting process
p1.start()
# wait until process is finished
p1.join()
# print global result list
print("Result(in main program): {}".format(result))
应该像他们在教程中所说的那样打印这个结果:
Result(in process p1): [1, 4, 9, 16]
Result(in main program): []
但是当我运行它时它会打印
Result(in main program): []
我认为专业甚至还没有开始。 我正在使用来自 anaconda 的 python 3.7.9。 如何解决这个问题?
不要使用您同时访问的全局变量。 全局变量在大多数情况下是一个非常糟糕的主意,应该非常小心地使用。 最简单的方法是使用p.map
。 (您不必启动/加入流程)
with Pool(5) as p:
result=p.map(square_list,mylist)
如果您不想使用p.map
您也可以使用q.put()
返回值和q.get()
从 function 获取值
You can find also examples for getting the result in multiprocessed function here: https://docs.python.org/3/library/multiprocessing.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.