Python中文
首页
教程
问答
标签
搜索
登录
注册
分析多进程Python脚本时出现神秘的pickle错误
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我使用<code>multiprocessing</code>模块,并使用通过<code>multiprocessing.Queue</code>对象发送的<code>UpdateMessage</code>对象(我自己的类)在进程之间通信。课程如下:</p> <pre><code>class UpdateMessage: def __init__(self, arrayref, rowslice, colslice, newval): self.arrayref = arrayref self.rowslice = rowslice self.colslice = colslice self.newval = newval def do_update(self): if self.arrayref == 'uL': arr = uL elif self.arrayref == 'uR': arr = uR else: raise Exception('UpdateMessage.arrayref neither uL nor uR') arr[self.rowslice, self.colslice] = self.newval </code></pre> <p>当我运行脚本时,它运行得非常好。但是,当我使用<code>cProfile</code>或<code>profile</code>运行它时,它会给出以下错误:</p> ^{pr2}$ <p>它似乎是想把班里的人弄得一团糟,但我不明白为什么会这样。我的代码不能做到这一点,没有它它也能正常工作,所以它可能是<code>multiprocessing</code>模块。但是为什么它需要pickle <code>UpdateMessage</code>,我如何修复错误?在</p> <p>编辑:以下是发送<code>UpdateMessage</code>的部分代码(脚本的多个部分执行此操作,但都是以相同的方式):</p> <pre><code>msg = UpdateMessage(uLref, refer[0] + marker[0] - 2, slice(uL.shape[1]), ustar.copy()) queue.put(msg) </code></pre> <p>回溯不是很有用:</p> <pre><code>Traceback (most recent call last): File "/usr/lib/python3.2/multiprocessing/queues.py", line 272, in _feed send(obj) </code></pre>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>我假设在你的类被发送到另一个进程之前对你的类进行酸洗。最简单的解决方案可能就是在类上显式地实现pickle协议。。。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
无法使用Django/mongoengine连接到MongoDB(身份验证失败)
5 回答
无法使用Django\u mssql\u后端迁移到外部hos
6 回答
无法使用Django&Python3.4连接到MySql
2 回答
无法使用Django+nginx上载媒体文件
1 回答
无法使用Django1.6导入名称模式
9 回答
无法使用Django1.7和mongodb登录管理站点
10 回答
无法使用Djangoadmin创建项目,进程使用了错误的路径,因为我事先安装了错误的Python
5 回答
无法使用Djangockedi验证CBV中的字段
5 回答
无法使用Djangocketditor上载图像(错误400)
1 回答
无法使用Djangocron进行函数调用
9 回答
无法使用Djangofiler djang上载文件
10 回答
无法使用Djangokronos
9 回答
无法使用Djangomssql provid
7 回答
无法使用Djangomssql连接到带有Django 1.11的MS SQL Server 2016
1 回答
无法使用Djangomssq迁移Django数据库
3 回答
无法使用Djangonox创建用户
7 回答
无法使用Djangopyodb从Django查询SQL Server
8 回答
无法使用Djangopython3ldap连接到ldap
4 回答
无法使用Djangoredis连接到redis
4 回答
无法使用Django中的FK创建新表
6 回答