首页 > 解决方案 > 尽管我有异步代码,为什么我会立即得到这个 ajax 调用的结果?

问题描述

我正在学习使用 Python 进行异步编程,但我不明白为什么当我调用与此调用对应的路由时会立即得到答案(我将其称为 ajax 调用,平台是 Django,此文件是Django 应用程序中的views.py文件)?

(当我点击按钮 ajax 调用购买方法时,它会模拟用沙箱购买一些股票并返回结果,我希望它等待 5 秒然后返回结果,而不是我几乎立即得到 ajax 调用的结果)

async def buy(request):

    figi = request.GET.get('figi', 'missing')
    data = {
        'result': 'success',
        'figi': figi
    }

    SANDBOX_TOKEN = 'some_token'

    async def buy_stock():
        try:
            async with TinkoffInvestmentsRESTClient(
                token=SANDBOX_TOKEN) as rest:
    
                order = await rest.orders.create_market_order(
                    figi="BBG000BTR593",
                    lots=1,
                    operation=OperationType.BUY,
                )
    
                await asyncio.sleep(5)
    
                result = await rest.orders.create_limit_order(
                    figi="BBG000BTR593",
                    lots=1,
                    operation=OperationType.SELL,
                    price=50.3,
                )
    
                return 'result'
        except TinkoffInvestmentsError as e:
            print(e)
    
    result = await buy_stock()    
    
    return JsonResponse({
        'result': 'success',
        'message': result
    }, safe=False)        

换句话说,似乎调用不会等待异步方法完成并立即发送 JsonResponse

标签: pythondjangopython-3.9

解决方案


推荐阅读