在Jupyter Notebook自定义了函数,然后调用multiprocess库进行多进程处理,发现程序一直处于运行状态,不出结果也不结束,而在Pycharm中则正常运行,难道是.ipynb格式的自定义函数不支持多进程?Jupyter用于数据分析还是很好用很方便的,但是有些大文件的运行如果不支持多进程的话很费时间,比如量化回测等,这个问题需要解决。
Jupyter中源代码:
import multiprocessing
# 定义一个简单的处理函数
def process_value(value):
return value * 2
def main():
# 原始的大列表
original_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 创建一个进程池
pool = multiprocessing.Pool()
# 使用进程池的map函数将处理函数应用于原始列表的每个值
processed_list = pool.map(process_value, original_list)
# 关闭进程池
pool.close()
pool.join()
# 打印结果
print("原始列表:", original_list)
print("处理后的列表:", processed_list)
if __name__ == "__main__":
main()
直接运行是没有结果的,且程序也不会自动停止。
解决办法:
先把代码写进.py文件中,比如在Pycharm中写好后保存,然后在Jupyter Notebook中通过import导入就可以直接运行。
例: 把上述代码保存到test.py文件中。
from test import process_value, main
import multiprocessing
if __name__ == "__main__":
main()
这样就能正常运行了。
注意,是只要把要调用的函数封装到.py文件就行,其他的没要求。
比如上述的代码还可以在Jupyter Notebook中这么写:
import multiprocessing
from test import process_value
if __name__ == "__main__":
original_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
pool = multiprocessing.Pool()
# 此处只调用process_value函数
processed_list = pool.map(process_value, original_list)
pool.close()
pool.join()
print("原始列表:", original_list)
print("处理后的列表:", processed_list)