芹菜任务与不可竞争的论点

2024-05-20 05:10:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试实现一个消息队列系统来将操作推送到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键和值的字典列表。在

我还是得到

^{pr2}$

我得到这个错误是因为celery任务使用的是实例方法吗?实现这一点的最佳方式是什么?在


Tags: 实例方法selfapi消息task队列response
2条回答

操作中可能有一个对象。在将对象传递给celery任务之前,需要将对象处理为字典或其他本机类型。在

要运行此MUTATE任务,必须将Call的实例传递给队列。我想您的调用,包含诸如__throwaway_service这样的奇特方法,很难被选中。所以您必须重新设计您的任务,在任务中重新构造self对象,然后应用原始的MUTATE。在

另外,您可能会发现this reciepe有助于确定哪些对象不能被pickle。在

更新

这种模式是否适用:

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

相关问题 更多 >