非并发代码执行多次

时间:2018-06-28 12:18:48

标签: python multiprocessing pathos

看看下面的代码:

from pathos.multiprocessing import ProcessingPool

def f(a,b):
    return a*b 

def caller(A,B):
    print("I'm Mr. Meseeks!")
    if __name__=='__main__':
        pool = ProcessingPool()
        res = pool.map(f,A,B)
        print(res)
    print("Look at me!")

caller([1,2,3,4],[5,6,7,8]) 

在这里,我打算从功能f同时调用功能caller。由于this的原因而添加了if __name__=='__main__':行。

由于pool.map仅调用f,因此,仅那个部分代码应运行4次(因为有4个输入)。因此,预期输出为:

I'm Mr. Meseeks!
[5,12,21,32]
Look at me!

但是,出乎意料的是,结果是:

I'm Mr. Meseeks!
I'm Mr. Meseeks!
Look at me!
I'm Mr. Meseeks!
Look at me!
I'm Mr. Meseeks!
Look at me!
I'm Mr. Meseeks!
Look at me!
[5, 12, 21, 32]
Look at me!

为什么不打算同时运行的代码会多次执行?为什么要精确5次?输入的数量是4,那么这5来自哪里?

0 个答案:

没有答案