在视图中将函数转换为异步函数。 Django的/蟒蛇

时间:2019-05-17 07:38:56

标签: python django django-views python-asyncio

我想就如何将以下功能转换为异步功能发表您的看法。

def currency_converter(price, curr1="SEK", curr2="EUR"):  
    c = CurrencyConverter()
    try:
        return c.convert(price, curr1, curr2)
    except ValueError or RateNotFoundError as err:
        return str(err)

此功能获取价格,2个货币代码并将价格转换为所选货币。问题是,当您循环使用此功能时,每次迭代都要花一些时间向Web主机发送请求/从Web主机接收请求(20个请求大约需要2-3秒)

此功能在DJANGO的以下VIEW中使用:


class BlocketView(DetailView):
    model = BoatModel
    template_name = 'blocket.html'

    def get_context_data(self, **kwargs):
        context = DetailView.get_context_data(self, **kwargs)
        context["blocket"], context['pricelist'] = (spider(self.kwargs.get("name")))
        context["pricelist_euro"] = [currency_converter(price) for price in context['pricelist']]
        return context

此处从价格清单中获取价格,并使用转换后的价格创建新的上下文[“ pricelist_euro”]清单。

此功能也可用作模板过滤器:


@register.filter
def currency_converter(price, curr1="SEK", curr2="EUR"):
    c = CurrencyConverter()
    try:
        return c.convert(price, curr1, curr2)
    except ValueError or RateNotFoundError as err:
        return str(err)

是否有机会以某种方式将此功能转换为异步功能?

谢谢

1 个答案:

答案 0 :(得分:0)

最后,我决定计算1次汇率,然后用它来转换其余价格。不过还是很慢。

    def get_context_data(self, **kwargs):
        context = DetailView.get_context_data(self, **kwargs)
        context["blocket"], context['pricelist'] = (spider(self.kwargs.get("name")))
        rate = currency_converter(1000)
        context["pricelist_euro"] = []
        for price in context['pricelist']:
                try:
                    context["pricelist_euro"].append(int(price/rate))
                except TypeError:
                    context["pricelist_euro"].append(None)
        return context