python 如何在同步celery 任务中执行协程对象中的一个值?

tf7tbtn2  于 2023-01-19  发布在  Python
关注(0)|答案(1)|浏览(107)

我有两个函数- async,它返回带有int值的协同程序对象,还有sync函数,它是@shared_task,其中变量必须存储来自async函数的值(int)
我的异步函数,返回包含int的协程:

async def club_count(club_id):
    return get_number_of_club(club_id).get_clients_in_club_count(club_id)

我的同步函数shared_task在Django admin中创建了一个记录变量“club_load”必须存储来自我的异步函数的值但当我尝试运行celery 时,我在“procent_club_load”中得到了协程和int之间的操作错误

@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

有什么办法可以把协程对象的值执行到一个共享任务的同步函数的变量中?
我正尝试将异步函数中的一个值存储在synccelepie任务的变量中
第二个问题是,我试图用共享任务创建一个周期性任务,但是收到了sync函数中的协程对象的错误

gdx19jrr

gdx19jrr1#

您可以使用asgiref.sync.async_to_sync
您可以运行:

from asgiref.sync import async_to_sync

result = async_to_sync(club_count)()

相关问题