检查Python任务的芹菜队列
我有一个Django+芹菜应用程序,芹菜用于将Django模型实例推(拉)到第三方SOAP服务 我的Django模型之间有依赖关系,还有一个简单的散列,如下所示:检查Python任务的芹菜队列,python,django,celery,Python,Django,Celery,我有一个Django+芹菜应用程序,芹菜用于将Django模型实例推(拉)到第三方SOAP服务 我的Django模型之间有依赖关系,还有一个简单的散列,如下所示: class MyModel(Models): def get_dependencies(self): # ... return [...] def __hash__(self): return hash(self.__class__.__name__+str(self.
class MyModel(Models):
def get_dependencies(self):
# ...
return [...]
def __hash__(self):
return hash(self.__class__.__name__+str(self.pk))
celery -A server worker -P eventlet -c 100
这个散列在我自己的实现中很方便,由于稳定性问题,我不得不放弃它。芹菜是一种更坚实的土壤
当我将实例推送到SOAP服务时,我必须确保它的依赖项已经被推送到。这是通过检查所有相关实例的pushed\u ok
时间戳字段来完成的
困难的部分是推送一个实例a
,它依赖于实例列表deps
(都是MyModel
子类的实例)。我无法推送a
,除非deps
中的所有实例都已由芹菜处理。换句话说,我需要序列化任务,以便遵循dependecies顺序
芹菜是这样做的:
class MyModel(Models):
def get_dependencies(self):
# ...
return [...]
def __hash__(self):
return hash(self.__class__.__name__+str(self.pk))
celery -A server worker -P eventlet -c 100
如何防止其中一个Eventlet(/process/thread)在其依赖项(若有的话)被其他Eventlet运行完之前运行a
感谢您的帮助。我找到了一个实用的解决方案,将资源的所有依赖项检查(包括将不同步的依赖项推送到soap服务器)移到芹菜任务中。而不是试图根据资源的依赖项序列化任务 好的一面是它保持了它的简单性,我可以快速实现它 不利的一面是,我暂时锁定了一个工作进程,并且可能会执行许多同步SOAP操作,而不是将这些操作分派给其他工作进程