Python如何找到对象内所有无法刺穿的物品

时间:2019-03-01 19:45:18

标签: python pickle

我有一个使用多处理程序。我正在尝试使用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)

1 个答案:

答案 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:来捕获任何异常。