Je travaille sur un blog Django et je dois être en mesure de programmer des publications à publier ultérieurement. Céleri fonctionne très bien pour la planification initiale des publications, mais je rencontre des problèmes lorsqu'un utilisateur essaie de mettre à jour le message pour qu'il soit soit replanifié, soit annulé indéfiniment.Problème lors de la planification et de la réorganisation des messages avec Celery
Voici ce que je suis en train de faire:
def save(self, **kwargs):
'''
Saves an event. If the event is currently scheduled to publish,
sets a celery task to publish the event at the selected time.
If there is an existing scheduled task,cancel it and reschedule it
if necessary.
'''
import celery
this_task_id = 'publish-post-%s' % self.id
celery.task.control.revoke(task_id=this_task_id)
if self.status == self.STATUS_SCHEDULED:
from blog import tasks
tasks.publish_post.apply_async(args=[self.id], eta=self.date_published,
task_id=this_task_id)
else:
self.date_published = datetime.now()
super(Post, self).save(**kwargs)
Le problème est, une fois une tâche Céleri ID a été répertorié comme révoqué, il reste révoqué même après que j'essayer de remettre à plus tard. Cela semble être une tâche assez commune qu'il devrait y avoir une solution facile.
Pourquoi utiliser le céleri? Votre publication ne peut-elle pas contenir les champs start_publishing et stop_publising datetime? –
Nous aimerions programmer des événements pour changer le statut car nous pouvons invalider le cache lors de son enregistrement. – Joshmaker
Notez que 'revoke' ne fonctionne qu'avec RabbitMQ! – asksol