Chcę zarządzać zadaniami przy użyciu selera. Chcę mieć jedną kolejkę zadań (ze współbieżnością 1) i móc przekazywać zadania do kolejki z różnymi priorytetami, tak że zadania o wyższym priorytecie będą wyprzedzały pozostałe.Priorytet zadań dla selera
dodaję trzy zadania do kolejki tak:
add_tasks.py
from tasks import example_task
example_task.apply_async((1), priority=1)
example_task.apply_async((2), priority=3)
example_task.apply_async((3), priority=2)
Mam następującą konfigurację:
tasks.py
from __future__ import absolute_import, unicode_literals
from celery import Celery
from kombu import Queue, Exchange
import time
app = Celery('tasks', backend='rpc://', broker='pyamqp://')
app.conf.task_queues = [Queue('celery', Exchange('celery'), routing_key='celery', queue_arguments={'x-max-priority': 10})]
@app.task
def example_task(task_num):
time.sleep(3)
print('Started {}'.format(task_num)
return True
Oczekuję, że drugie zadanie dodane do uruchomienia przed trzecim, ponieważ ma wyższy priorytet, ale nie ma. Działają w kolejności dodanej.
Podążam za dokumentami i myślą, że poprawnie skonfigurowałem aplikację.
Czy robię coś złego, czy też nie rozumiem funkcji priorytetu?
Dzięki za odpowiedź. Pobrałem Twój projekt i przetestowałem go dokładnie tak, jak udokumentowano z ustawieniami opisanymi przez ciebie, ale nadal nie widzisz działania priorytetowego. – EngineerCamp
@EngineerCamp Sprawdziłem ponownie po sklonowaniu go ponownie i wydawało się, że działa dobrze. Istnieje mały podgląd wideo [tutaj] (https://www.youtube.com/watch?v=nQXO2kjGV9M&feature=youtu.be) z tylko jednym pracownikiem Seler, dzięki czemu można łatwo obserwować sortowanie zadań. Na początku filmu (gdy wideo jest transkodowane do 360p), ** obserwuj, jak 720p ma wyższy priorytet, gdy kliknięcia 480p i 720p są klikane, nawet gdy najpierw kliknięto 480p **. –
Dałem jeszcze raz, ale wciąż nie mam szczęścia. Używam Pythona 3 i jestem na Ubuntu 14.04, więc może są pewne różnice. – EngineerCamp