如何在Flask中多线程函数?

如何在Flask中多线程函数?

问题描述:

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

这里是我的代码

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') }} руб

我在这里返回吨价,我要回来自api的数据,请问我该怎么做?

另一个问题,我忘了提及,如果我打开任何产品页面的时间约10秒的页面!

你应该尽量多处理来代替:

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() 
+0

它的工作,但加载页面时,为什么我收到的延迟? ,有没有什么办法可以在没有任何延迟的情况下完成? – swordfish

+0

它可能是任何东西。我会建议在代码块的前后打印时间,以查明确切地说明了造成它的原因需要多长时间。 – gommb

+0

页面内我正在运行过滤器约10倍,所以我可以在同一时间获得所有的产品价格,也许这是什么原因导致延迟? – swordfish