我的场景如下:我有一个大型机器学习模型,它由一群工人计算。实质上,工人计算他们自己的模型部分,然后与结果进行交换,以保持全局一致的模型状态。如何避免酸洗芹菜任务?
因此,每个芹菜任务计算它是自己的一份工作。 但是这意味着,任务不是无状态的,这里是我的麻烦:如果我说some_task.delay(123, 456)
,实际上我是不是在这里发送两个整数!
我发送整个任务的状态,这是在芹菜某处腌制的。这种状态通常是约200 MB: - ((
我知道,这是可能的选择芹菜像样的串行器,但我的问题是如何不咸菜只是任何数据,这可能是在任务 。 ?如何咸菜任务的参数只有 这里是芹菜/应用/ task.py引文:
def __reduce__(self):
# - tasks are pickled into the name of the task only, and the reciever
# - simply grabs it from the local registry.
# - in later versions the module of the task is also included,
# - and the receiving side tries to import that module so that
# - it will work even if the task has not been registered.
mod = type(self).__module__
mod = mod if mod and mod in sys.modules else None
return (_unpickle_task_v2, (self.name, mod), None)
我只是不希望这种事情发生 有它周围的一个简单的方法,或者我只是被迫建立我自己的芹菜(这是难以想象的)?
谢谢,里卡多,但实际上需要使用AsyncResult。这是整个方案的关键点。也许可以将任务状态分成假的“可存储”部分(只是为了使AsyncResult工作)和任务的“可用”状态,而不是每个请求的腌制状态?我的请求量非常高,每个请求移动200Mbs是不可能的。 –