2017-04-25 53 views
6

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?

Odpowiedz

4

Istnieje możliwość, że kolejka nie ma szans na nadanie priorytetu wiadomościom (ponieważ zostaną pobrane przed rozpoczęciem sortowania). Wypróbuj te dwa ustawienia (dostosuj do projektu w razie potrzeby):

CELERY_ACKS_LATE = True 
CELERYD_PREFETCH_MULTIPLIER = 1 

Mnożnik wstępny ma domyślnie wartość 4.

Opracowałem przykładową aplikację, aby zrealizować priorytetowe zadania Selera w bardzo małej skali. Proszę spojrzeć na to here. Podczas jego opracowywania napotkałem bardzo podobny problem i ta zmiana ustawień faktycznie go rozwiązała.

Należy również pamiętać, że wymagana jest również wersja RabbitMQ 3.5.0 lub nowsza.

+0

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

+0

@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 **. –

+0

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