我有一个使用多处理程序。我正在尝试使用multiprocessing.Queue()在每个进程之间共享信息。此队列不处理不可拾取的项目。我已经做了一些鸭子测试,以检查对象是否可拾取,然后手动检查该对象以找到不可拾取的物品。除了手动执行此操作外,还有其他方法可以找到所有无法拾取的项目并将其删除吗?找到无法拾取的物品的原因是可以将其删除,因为不会将任何问题传递到队列中。
这是简化的代码版本:
# Test that object is pickle-able so results can be transferred
# Exception will be raised if not pickle-able
pickle.dumps(shareInfoObject)
mpQueue.put_nowait(shareInfoObject)
答案 0 :(得分:0)
我不确定“查找所有无法刺破的物品”是什么意思。这是一个检查给定对象是否可腌制的函数:
import pickle
def pickleable(obj):
try:
pickle.dumps(obj)
except pickle.PicklingError:
return False
return True
# Test
import os
print(pickleable(42)) # True
print(pickleable(os)) # False
在Python 2中,可能会得到与pickle.PicklingError
不同的错误,因此,更健壮(尽管不太谨慎)的选择是仅使用except:
来捕获任何异常。