Nano Hash - криптовалюты, майнинг, программирование

как я могу синхронизировать задачу django celery?

У меня есть две задачи сельдерея

@app.task(bind=True)
def task1():

@app.task(bind=True)
def task2():

и каждая задача вызывается другим API, например следующим

@api_view(['POST'])
@permission_classes((IsAuthenticated,))
def api1(request):
    task_1.delay()

@api_view(['POST'])
@permission_classes((IsAuthenticated,))
def api2(request):
    task_2.delay()

если задача 2 вызывается, когда задача 1 выполняется в фоновом режиме, я хочу запустить задачу 2 после завершения задачи 1.

как можно решить проблему??

Я также рассматриваю возможность предоставления одной очереди для каждого пользователя

Пожалуйста, дайте мне идеальное решение...

04.06.2018

  • Какие ваши задачи требуют синхронности? 04.06.2018

Ответы:


1

Ваша проблема состоит из двух подзадач:

  1. Убедитесь, что task2 не запускается, когда работает task1. Вы можете решить эту проблему, внедрив распределенную блокировку, например. с использованием Redis.
  2. Убедитесь, что task2 запускается после завершения task1. Это можно решить, повторить попытку task2 до блокировки становится доступным.

Вот некоторый псевдокод:

def task1():
    with distributed_lock():
        # do actual task

def task2():
    while not is_lock_available():
         self.retry()
    # do actual task

Есть пара деталей, которые следует учитывать:

  • что произойдет, если task1 сработает, когда task1 уже запущен?
  • что произойдет, если task2 сработает, когда task2 уже запущен?
  • какая задержка допустима перед запуском ожидающего задания task2?
  • что произойдет, если другое задание task1 запланировано между окончанием task1 и запуском ожидающего задания task2?
04.06.2018
  • Спасибо за ваш ответ. есть много вещей, которые нужно учитывать, и это кажется опасным способом. поэтому я должен либо устранить зависимость между двумя задачами, либо сделать их одной задачей 05.06.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..