问题:
在研究论文代码时候遇到一个需要运行multiprocessing,但是源代码是在jupyter中的却无法运行multiprocessing,会一直卡住,运行在[*]这个状态中,但是无论运行多久都不会报错,然而在pycharm中运行完全没有问题。
问题描述:
用一个简单的小例子说明一下:
这里会一直卡住,无法运行也不会报错。
我以为是我写的程序有问题,因为jupyter中不会显示子程序的输出结果的,所以将程序放在pycharm中看看运行效果
import multiprocessing
def fun(a,b):
print(a)
return a+b
if __name__=='__main__':
pool = multiprocessing.Pool(4)
inputs = []
for i in range(10):
inputs.append((i + 1, i + 2))
print(inputs)
pool.starmap(fun, inputs)
这里看出是有运行效果的,所以应该是pycharm中和jupyter的一些区别导致他们无法运行。
解决方案:
之后查找了一些资料,至于原因是什么我没找到,估计是jupyter和pycharm设计的不同导致的。但是找到了一个能在jupyter中运行multiprocessing解决方案:
将函数写在一个模块中(或者是临时文件中),再通过导入并调用的方式运行。
先是函数那里:
%%writefile test.py
def fun(a,b):
print(a)
return a+b
这句%%writefile 就是将这个函数保存为一个叫test.py的文件中
之后是调用:
import test
pool = multiprocessing.Pool(4)
inputs = []
for i in range(10):
inputs.append((i+1,i+2))
print(inputs)
pool.starmap(test.fun,inputs)
通过import test再利用test.py就可以完美运行了,下面是运行结果:
后续:
关于threading和multiprocessing的区别以及运行方式,这里后续会整理一下,方便自己查看。
threading是多线程,multiprocessing是多进程,似乎jupyter中threading运行没有问题,这个没有进行试验,后续整理的时候一块弄。