python - Python如何在对象内找到所有不可腌制的项目
问题描述
我有一个使用多处理的程序。我正在尝试使用 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)
解决方案
我不确定“找到所有不可腌制的物品”是什么意思。这是一个检查给定对象是否可腌制的函数:
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:
捕获任何异常。
推荐阅读
- javascript - 创建一个链接以将事件添加到 yahoo calandar
- reactjs - React Jest 测试无法使用 ts-jest 运行 - 在导入的文件中遇到意外的令牌
- waze - 来自 Waze 的交通数据
- python - 如何通过 Pandas DataFrame 优化循环
- python - 在上传 wagtail 时将文件扩展名转换为小写
- python - 如何获取多个文件的平均加载时间
- c++ - 有没有办法不使用命名空间中的项目?
- google-bigquery - 如何查看 BigQuery Storage API 日志?
- javascript - 使用 nodejs 和 mongodb 的原子事务
- flutter - 如何在 Flutter App 中正确使用 BlocListener 和 BlocProvider