Как выполнить значение из объекта coroutine в задаче sync celery?
У меня есть 2 функции - async, которая возвращает объект coroutine со значением int, и функция sync, которая является @shared_task, где переменная должна хранить значение из функции async (int)
Моя async-функция, которая возвращает coroutine с int в ней:
async def club_count(club_id):
return get_number_of_club(club_id).get_clients_in_club_count(club_id)
Есть моя функция синхронизации, которая shared_task с внесением записи в админку Django Проблема с переменной "club_load", которая должна хранить значение из моей асинхронной функции. Но когда я пытаюсь запустить celery, я получаю ошибку операции между coroutine и int в "procent_club_load"
@shared_task
def get_club_load():
all_clubs = Club.objects.all()
for club in all_clubs:
if club.monitoring_club_load == True:
club_load = club_load_json(club.id)
club_capacity = club.club_load
procent_club_load = None
if club_capacity:
procent_club_load = int((club_load / club_capacity)*100)
club_load_record = ClubLoadModel(
club_id = club.id,
created_at = timezone.now(),
weekday = timezone.localtime().weekday() + 1,
club_load = club_load,
procent_club_load = procent_club_load
)
club_load_record.save()
else:
pass
Каким решением я могу выполнить значение из объекта coroutine в переменную функции sync, которая является общей задачей?
Я пытаюсь сохранить значение из моей async-функции в переменной sync celery task
Проблема в том, что celery не может делать операции с асинхронными функциями Вторая проблема, что я пытаюсь сделать периодическую задачу с этой общей задачей, но получаю ошибку с объектом coroutine в функции sync
Вы можете использовать asgiref.sync.async_to_sync
:
Вы можете выполнить:
from asgiref.sync import async_to_sync
result = async_to_sync(club_count)()