python - 在 Python 中使用 Pool 类进行多处理会产生 Pickling 错误
问题描述
我正在尝试在 zeppelin 笔记本(在 Windows 中)中的 python3.6 中运行一个简单的多处理示例,但我无法执行它。下面是我使用的代码:
def sqrt(x):
return x**0.5
numbers = [i for i in range(1000000)]
with Pool() as pool:
sqrt_ls = pool.map(sqrt, numbers)
运行此代码后,我收到以下错误:
Traceback (most recent call last):
File "/tmp/zeppelin_python-3196160128578820301.py", line 315, in <module>
exec(code, _zcUserQueryNameSpace)
File "<stdin>", line 6, in <module>
File "/usr/lib64/python3.6/multiprocessing/pool.py", line 266, in map
return self._map_async(func, iterable, mapstar, chunksize).get()
File "/usr/lib64/python3.6/multiprocessing/pool.py", line 644, in get
raise self._value
File "/usr/lib64/python3.6/multiprocessing/pool.py", line 424, in _handle_tasks
put(task)
File "/usr/lib64/python3.6/multiprocessing/connection.py", line 206, in send
self._send_bytes(_ForkingPickler.dumps(obj))
File "/usr/lib64/python3.6/multiprocessing/reduction.py", line 51, in dumps
cls(buf, protocol).dump(obj)
_pickle.PicklingError: Can't pickle <function sqrt at 0x7f6f84f1a620>: attribute lookup sqrt on __main__ failed
我不确定是否只有我面临这个问题。正如我看到的很多文章,人们可以轻松地运行代码。如果您知道解决方案,请帮助
谢谢
解决方案
Zeppelin 笔记本无法很好地模拟普通模块,无法支持用于识别另一个进程的正确操作的酸洗。您可以按照通常的方式将要调用的所有函数import
放入适当的模块中。
推荐阅读
- mongodb - 将对象结构从带有对象的项目更改为 MongoDB 中的对象数组显示错误“反序列化时发生错误”
- javascript - 如何更改轮播下带有文本的部分
- d3.js - 如何将网格线添加到 d3 realTimeChartMulti?
- c# - 如何在我的 C# 和 T-SQL 代码中修复此错误
- c# - 使用数据库 MVC 的单页
- groovy - 流集的 Groovy 脚本,用于解析大约 1500 个字符的字符串
- ag-grid - 事件侦听器不适用于 ag-grid Angular 中的自定义单元格渲染器
- c# - C# Task.Run() 停止工作并永远等待
- javascript - 当 setState 不立即运行时验证表单
- r - 使用 Polar 方法模拟随机变量