0

我正在尝试在我编写的类中使用多处理来加速计算。我正在使用 pathos.multiprocessing 和 dill,并在 ProcessingPool 上使用地图。我已经在控制台中测试了多处理的功能,它按预期执行。我遇到的问题是,当我尝试在我的代码中实现它时,只要它调用 pool.map 我正在使用的终端就会开始吐出荒谬的废话。输出可以识别为来自代码,但我不知道它是如何打印的。其中一些来自我在下面定义的方法,其中包括当前日期时间。胡说八道,我看到它正在打印当前时间,在调用 pool.map 之后,所以这不仅仅是重复打印的东西,它是新的输出。

My_func 比我下面的要复杂一些,但作为第一步,我将其更改为下面写的字面意思,但问题仍然存在。

此外,Ctr-C 确实会触发 KeyboardInterrupt,但不会完全停止程序。我在 Windows 10 上使用 Visual Studio 和 python 2.7.13。

from pathos.multiprocessing import ProcessingPool
import dill
import datetime

class my_class(Object):
    def __init__(self):
        pool = ProcessingPool(nodes=4)

        p1 = [1,2,3]
        p2 = [4,5,6]
        p3 = [7,8,9]

        results = pool.map(self.my_func, p1, p2, p3)

    def my_func(self,x,y,z):
        print(x,y,z)

    def status_printout(self,message):
        header = datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')
        print(header+' -- '+message)
4

2 回答 2

0

尝试使用 aLock来确保一次只有一个子进程写入标准输出。

于 2017-11-22T22:44:00.550 回答
0

我没有使用建议的

if __name__ == '__main__':
    freeze_support()

对于 Windows。现在一切正常。

于 2017-11-27T20:44:18.030 回答