我有一个~ 14,000行的dataframe,并试图通过调用API将一些数据填充到新列中。下面的代码检索预期的响应,但是,似乎每次迭代都等待响应转到下一行。
下面是函数:
def market_sector_des(isin):
isin = '/isin/' + isin
return blp.bdp(tickers = isin, flds = ['market_sector_des']).iloc[0]
我正在使用xbbg调用Bloomberg API。
.apply()函数返回预期的响应,
df['new_column'] = df['ISIN'].apply(market_sector_des)
但是每个响应需要大约2秒,在14,000行中大约需要8小时。
有没有什么方法可以让这个apply函数异步,这样所有的请求都可以并行发送?我已经看到dask作为一个替代方案,但是,我在使用它时也遇到了问题。
3条答案
按热度按时间bvjxkvbb1#
如果以上正是您想要做的,那么可以通过创建一个包含要发送的ticker语法的列,然后将该列作为一个序列通过blpapi传递来实现
然后,您可以将新创建的df连接到现有的df,以便完整地获得列中的数字。
这应该会导致一个单一的电话,这将理想地下降到不到一分钟的速度。如果这工作让我知道。
5q4ezhmt2#
你可以使用
multiprocessing
来并行化API调用。将你的Series划分为THREAD块,然后每个块运行一个进程:main.py
parallel_tickers.py
编辑:使用另一个模块的mp功能
vdzxcuhz3#
这可以使用asyncio语法来完成。工作代码如下: