1

这是我的代码:

from math import sqrt
from joblib import Parallel, delayed
import multiprocessing

def parallel_calc():
    if __name__ == '__main__':
        result = Parallel(n_jobs=2)(delayed(sqrt)(i ** 2) for i in range(10))
        return result

result = parallel_calc()
print(result[-1])

它生成错误消息:print(result[-1]) TypeError: 'NoneType' object is not subscriptable. 此外,它不会终止。

由于我在 Window 7 上,我必须使用此检查if __name__ == '__main__':,但是如何从parallel_calc函数中获取结果?

4

1 回答 1

2

if __name__..., 或boilerplate, 移到函数范围之外。

if __name__ == '__main__':
    def parallel_calc():
        result = Parallel(n_jobs=2)(delayed(sqrt)(i ** 2) for i in range(10))
        return result

    result = parallel_calc()
    print(result[-1])

由于您的parallel_calc函数不驻留在 中boilerplate,因此它被调用了两次。

错误来自Parallel第一次调用时未执行的进程,返回None

查看“Python 中的样板代码”以获取有关boilerplates

于 2015-09-01T16:09:00.917 回答