W aplikacji django uruchamiam zadania asynchroniczne i chcę pokazać postęp, błędy itp. Dla użytkownika. Jeśli występują błędy, użytkownik powinien przekierować na stronę, na której wymagane jest dodatkowe wprowadzenie lub jakieś działanie w celu rozwiązania problemu. Jaki jest najlepszy sposób komunikowania się z pracy selera z powrotem do przodu?Django pracownik do selera wysyłanie wiadomości w czasie rzeczywistym i komunikaty o wynikach do interfejsu użytkownika
Oto podstawowa struktura w pseudo kod:
# views.py
from tasks import run_task
def view_task():
run_task.delay()
return render(request, 'template.html')
# tasks.py
from compute_module import compute_fct
@shared_task
def run_task():
result = compute_fct()
# how to catch status update messages from compute_module while compute_fct is running??
if result == 'error':
handle_error()
else:
handle_succes()
# compute_module
import pandas as pd
def compute_fct():
# send message: status = loading file
df = pd.read_csv('test.csv')
# send message: status = computing
val = df['col'].mean()
if val is None:
return {'status':'error'}
else:
return {'status':'success','val':val}
Co bym idealnie chcą:
compute_module.py
wykorzystuje moduł Pythona natywną rejestratora. Przez oddzielenie obowiązków chcę, aby rejestrowanie było jak najbardziej ogólne i wykorzystywać standardowe rejestratory Pythona/Django. Ale wydaje się, że nie są zaprojektowane do wysyłania wiadomości na front.- zadanie seler jakoś radzi sobie dzienniki i zamiast wyświetlania ich na stdout przekierowuje je do popychacza
- Czołowy js pokazy i obsługuje wiadomości
Nie może być standardowe sposoby komunikowania się pomiędzy pracownikiem selera i przód koniec, że nie jestem świadoma. ten scenariusz musi zdarzać się często i jestem zaskoczony, że jest to trudne do wdrożenia. w pewien sposób należy zaprojektować kolejkę komunikatów rabbitmq lub aws sns. poniżej znajdują się zasoby, na które patrzyłem, ale nie czuję, żeby któryś z nich działał bardzo dobrze, ale może jestem po prostu zdezorientowany.
rejestrowania: wydaje się to być więcej o zalogowaniu po stronie serwera, a nie wysyłanie wiadomości do użytkowników
- http://docs.celeryproject.org/en/latest/userguide/tasks.html#logging
- https://docs.djangoproject.com/en/2.0/topics/logging/
- http://oddbird.net/2017/04/17/async-notifications/
- https://www.google.com/search?q=celery+worker+send+message+to+front+end
Seler krzywki wydaje się, że chodzi o zadania monitorowania administratora, a nie o sen ding wiadomości do użytkownika
popychacz lubię, ale nie chcę mieć compute_module.py
sobie z tym poradzić. To jest na przykład Wolę nie robić żadnej integracji pusher.com wewnątrz compute_module.py
. Że mógłbym przekazać obiekt popychacza, który został już instancja więc moduł może tylko wiadomości Push ale znowu wolałbym go mieć charakter ogólny
- https://blog.pusher.com/improve-user-experience-app-real-time-progress-bar-tutorial/
- https://blog.pusher.com/django-pusherable/
jaki byłby postęp lokalizacja raport w Twoim przypadku? uruchamiasz zadanie, jest ono zrobione lub występują błędy. jeśli uruchomiłeś zadanie zdekomponowane jako podzadania, czy możesz użyć pracownika sieci do przekazania ostatecznego wyniku każdego sub-suba do klienta? nie jestem też naprawdę * uczucie * logowanie python jako mechanizm sprzężenia zwrotnego użytkownika - podejrzewam, że uzyskanie * ładny * wynik, esp dla html będzie więcej kłopotów niż to jest warte. –