如何在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()
它的工作,但加载页面时,为什么我收到的延迟? ,有没有什么办法可以在没有任何延迟的情况下完成? – swordfish
它可能是任何东西。我会建议在代码块的前后打印时间,以查明确切地说明了造成它的原因需要多长时间。 – gommb
页面内我正在运行过滤器约10倍,所以我可以在同一时间获得所有的产品价格,也许这是什么原因导致延迟? – swordfish