get_or_create и update_or_create сохраняют значения более одного раза при одновременном выполнении
Я использую djagno2.2 и python3 .5
Мой код выглядит примерно так
class MyClass():
def func1(arg = None):
.......very large block of code.........
This code can take 2-5 minutes to executes.
.........
MyModel.objects.get_or_create(name="abcd",defaults={Some params})
MyModel1.objects.update_or_create(name="abcd",defaults={Some params})
Я использовал django -celery для фоновых асин c процессов, и вот мой tasks.py файл
from __future__ import absolute_import, unicode_literals
from celery.decorators import periodic_task
from celery.schedules import crontab
@periodic_task(run_every=crontab(minute=00, hour=00))
def every_day_midnight():
"""Executes every day at 00:00 am."""
MyClass().func1()
@periodic_task(run_every=crontab(minute='*/2'))
def every_two_minutes():
"""Executes every 2 minutes"""
MyClass().func1(arg)
Здесь я назвал MyClass (). Func1 () ежедневно в полночь, и одна и та же функция выполняется с аргументом (arg) каждые две минуты.
Теперь моя проблема в том, что обе эти функции выполняются в одно и то же время в полночь, поэтому иногда MyModel и myModel1 сохраняют повторяющиеся значения . пока я использовал get_or_create и update_or_create
MyModel.objects.get_or_create(name="abcd",defaults={Some params})
MyModel1.objects.update_or_create(name="abcd",defaults={Some params})
Эта проблема возникает из-за обоих процессов сельдерея (every_day_midnight (), every_two_minutes ()) выполняется одновременно.
У меня есть пытался с транзакцией .automi c, но это не помогло мне.
Я хочу, когда процесс выполняется MyClass () или MyClass (). func1 другой процесс должен ждать завершения шляпа процесс. Другие идеи / решения также приветствуются
Как я могу это сделать. Заранее спасибо