如何在Flask中多线程函数?

时间:2017-10-28 19:05:46

标签: python multithreading flask

我有一个函数可以获取我使用financial google选择的任何货币的当前价格,我想多线程,以便我可以单独发送任何请求。

这是我的代码

def currency_converter(amount, currency):
    url = 'https://finance.google.com/finance/converter?a={}&from=KGS&to={}&meta=ei%3DmSr0WeHCCYvBsAH8n6OIBA'.format(amount, currency)
    urlHandler = urllib2.urlopen(url)
    html = urlHandler.read()
    bsoup = BeautifulSoup(html, 'lxml')
    num = bsoup.find('span').text.split()[0]
    return float(num)

@main_route.app_template_filter('currency_converter')
def thread_me(amount, currency):
    t = threading.Thread(target=currency_converter, args=[amount, currency])
    t.start()
    t.join()
    return t

以下是我在模板中运行过滤器的方法:

{{ product.price|float|currency_converter('RUB') }} руб

这里我返回t值,我想从api返回数据,请问我该如何完成?

另一个我忘记提及的问题,如果我打开任何产品页面,页面会延迟大约10秒!!

1 个答案:

答案 0 :(得分:0)

您应该尝试多处理:

from multiprocessing.pool import ThreadPool

#currency_converter code

@main_route.app_template_filter('currency_converter')
def thread_me(amount, currency):
    pool = ThreadPool(processes=1)

    result = pool.apply_async(currency_converter, (amount, currency))

    return result.get()