5年前 (2020-03-25)  Python |   抢沙发  1657 
文章评分 3 次,平均分 2.3
导语:最近项目需要做并行计算,于是尝试写了并行计算程序。一般使用并行有好几种方法,包括多线程和多进程。常用的多进程方法是两种:multiprocessing.Process, multiprocessing.Pool.这两种可有优势,但一般Pool可以使用map和apply方法,对于我来说更加方便。



最近项目需要做并行计算,于是尝试写了并行计算程序。一般使用并行有好几种方法,包括多线程和多进程。常用的多进程方法是两种:multiprocessing.Process, multiprocessing.Pool.这两种可有优势,但一般Pool可以使用map和apply方法,对于我来说更加方便。

写了个demo:

运行发现出现卡死,无法弹出结束光标。很是疑惑,几乎就是对照别人的例子来写的,检查了很久,不知道原因。后来折腾半天发现实例化池的时候有问题。修改如下:

有可能是实例化必须在if __name__ == "__main__":里面,也有可能是直接导入import multiprocessing会引起不必要的冲突。

让我想到官网上的一段话:

该软件包中的功能要求子项可以导入 __main__ 模块。这包含在 编程指导 中,但值得指出。这意味着一些示例,例如 multiprocessing.pool.Pool 示例在交互式解释器中不起作用。例如:

(如果你尝试这个,它实际上会以半随机的方式输出三个完整的回溯,然后你可能不得不以某种方式停止主进程。)

因此也可能是这个原因导致的。修改后的代码可以正常并行计算。

 

来源:本站原创

 

 

本文原始地址:https://www.ifyoung.net/multiprocessor-error.html

本站所有文章,若标明本站原创,转载请注明出处来自https://www.ifyoung.net/

关于

发表评论

表情 格式

暂无评论

登录

忘记密码 ?

切换登录

注册

扫一扫二维码分享