如何在并行进程(python)中将项目追加到列表中?

2024-09-29 23:29:58 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我正在处理的更复杂代码的一个非常简单的版本。问题是,我想将method()函数中计算的项附加到某个列表中,以便以后显示。但是,运行此代码时,list对象为空,而results数组已满。在

    import multiprocessing as mp
    global list
    list = []
    def add(thing):
        list.append(thing)
    def method():
        global list
        add(8) #doesn't work as wanted
        return 7
    def logResult(result):
        results.append(result)

    if (__name__ == '__main__'):
        results = []
        cpu = mp.cpu_count()
        pool = mp.Pool(processes=cpu)
        for x in range(0, 2000):
            pool.apply_async(method,callback=logResult)
        pool.close()
        pool.join()
        print list
        print results

输出:

^{pr2}$

我知道add方法似乎是多余的,但是一个简单的列表.追加method()函数中的()也不起作用。add方法用于镜像logResult方法()。我能理解为什么它不起作用,但我不知道怎么解决这个问题。如果没有并行化,程序可以正常工作,但是我的项目需要并行化,因为计算比method()函数要复杂得多。期望的输出是

    [8,8,8,8,8,8,8,8,8,8,8,8,...]
    [7,7,7,7,7,7,7,7,7,7,7,7,...] and so on.

提前谢谢。在


Tags: 方法函数代码add列表defasmp
3条回答

该列表应该驻留在共享内存中,以便可以从辅助进程访问。考虑^{}。在

似乎您在method()中设置了global list,它是空的。如果您以前设置过,则不需要in method()。在

pool.apply_async(method,callback=logResult)
  1. 缺少方法函数()。在
  2. logResult应该有东西可以传递(根据您的代码)

简单地改为:

^{pr2}$

得到结果[8,8,8,8,8…],[7,7,7,7,7…]

相关问题 更多 >

    热门问题