gpt4 book ai didi

python - 具有不可选取参数的 Celery 任务

转载 作者:太空宇宙 更新时间:2023-11-03 18:44:35 24 4
gpt4 key购买 nike

我正在尝试实现一个消息队列系统,以将操作推送到 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 任务根本使用实例方法吗?实现这个的最好的Python式方法是什么?

最佳答案

要运行此 MUTATE 任务,必须将 Call 实例传递到队列。我想您的 Call 包含诸如 __throtaway_service 之类的奇特方法,很难选择。因此,您必须重新设计任务,在任务中重建 self 对象,然后应用原始的 MUTATE

此外,您可能会发现 this reciepe对于找出到底什么对象不能被 pickle 很有用。

更新

此模式是否适用:

@celery.task
def mutate(service_settings, operations):
service = Service(**service_settings)
return service.mutate(operations)

关于python - 具有不可选取参数的 Celery 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19818416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com