我正在尝试实现一个消息队列系统来将操作推送到 AdWords API。
class Call(object):
@celery.task(filter=task_method)
def MUTATE(self, operations):
assert hasattr(self, '__throwaway_service')
with self.__throwaway_service as sm:
response = sm.mutate(operations)
return response
因为我不能将服务实例用作参数(服务具有向 API 发送“get”或“mutate”请求的方法),所以我将其设置为外部属性,并在该特定服务的所有操作都发送到MQ。
“操作”是包含字符串或 Unicode 键和值的字典列表。
我仍然得到
PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed
我收到这个错误是因为 celery 任务完全使用了实例方法吗?实现这一点的最佳和 Pythonic 方式是什么?