I have 2 functions - async, which returns the coroutine object with int value, and the sync function, whic is the @shared_task, where the variable must stores the value from the async function (int)
My async function, that returns the coroutine with int in it:
async def club_count(club_id):
return get_number_of_club(club_id).get_clients_in_club_count(club_id)
There is my sync function that shared_task with making a record into the Django admin Problem with the variable "club_load" that must stores the value from my async function But when I try to run the celery, I get the error of operation between coroutine and int in "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
What the solution that I can execute the value from coroutine object into the variable of sync function that a shared task?
I'm trying to store a value from my async function in the variable of sync celery task
Problem is that celery couldn't make operations with async functions The second problem, that I'm trying to make a periodic task with that shared task, but receive the error with coroutine object in sync function
CodePudding user response:
You can use asgiref.sync.async_to_sync
:
You can run:
from asgiref.sync import async_to_sync
result = async_to_sync(club_count)()