繁体   English   中英

Python 多处理未给出预期结果

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM