我想把scapy.layers.dhcp.BOOTP
的实例放在multiprocessing.Queue
上。每次调用put()
时,都会发生以下异常:
Traceback (most recent call last):
File "/usr/lib/python2.6/multiprocessing/queues.py", line 242, in _feed
send(obj)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
当然,尝试直接使用pickle.dumps()
来pickle实例也会失败。但为什么这个类不可挑选?在
对于所有没有安装scapy的用户:
^{pr2}$是否有其他方法可以将此实例“传输”到另一个子流程?在
好吧,问题是你不能腌制函数类型。这是你做
type(some_user_function)
时得到的。看到这个:因此,这样的函数类型存储在您尝试发送的对象的某个地方。它不在你粘贴的代码中,所以我猜它在超类上。在
也许您可以简单地发送创建
scapy.layers.dhcp.BOOTP
实例所需的所有参数,而不是实例来避免这个问题?在另一个有助于诊断此类问题的方法是使用pickle模块而不是cPickle(它必须由队列.py)在
我也遇到过类似的情况,得到了一个完全没有帮助的信息
我漫游到调试器中,发现对象正在被pickle,并尝试将其传递给
^{pr2}$得到了一个更有用的:
它更直接地指向有问题的代码。在
我使用的一个解决方案是str包,然后把它放到队列中。。。在
相关问题 更多 >
编程相关推荐