shepherdpp / qteasy

a python-based fast quantitative investment module
BSD 3-Clause "New" or "Revised" License
73 stars 28 forks source link

升级到v1.1.10后,tushare下载还是有1个错误 #146

Closed roc138 closed 6 months ago

roc138 commented 6 months ago
qt.configure(hist_dnld_retry_cnt=10, hist_dnld_retry_wait=5.,hist_dnld_backoff=3.)

qt.refill_data_source(tables='income, balance, cashflow, financial, forecast, express, comp, report, events', start_date='20240401', end_date='20240403',parallel=True,reversed_par_seq=True)

仔细看了一下还是有报错,fund_share表不行,fund_manager表可以了,升级到v1.1.10之前fund_manager下载也是有错误的。 C:\ProgramData\anaconda3\envs\qteasy-env-p311\Lib\site-packages\qteasy\database.py:5085: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation. dnld_data = pd.concat([dnld_data, df]) [#########################---------------]10800/16923-63.8% 0wrtn/about 11 minleftC:\ProgramData\anaconda3\envs\qteasy-env-p311\Lib\site-packages\qteasy\database.py:5134: UserWarning: 抱歉,您每分钟最多访问该接口600次,权限的具体详情访问:https://tushare.pro/document/1?doc_id=108。: download process interrupted at [fund_share]:<F180003.OF>-<011439.OF> 0 rows downloaded, will proceed with next table! warnings.warn(msg) [########################################]16923/16923-100.0% <fund_manager:F180003.OF-000006.OF>2287650wrtn in ~37' 进程已结束,退出代码为 0

shepherdpp commented 6 months ago

我能想到的原因仍然可能是并行下载过程中有太多的进程并行下载,导致一分钟之内反复尝试的次数超过了600次。 我想这时应该借助另外两个配置参数了:

以下配置可以使得每下载600组数据就等待一分钟:

qt.configure(hist_dnld_delay=60, hist_dnld_delay_evy=600)
qt.configure(hist_dnld_retry_cnt=3)  # 同时减少重试的次数以缩短报错前等待的时间,这个配置并不是必要的

按照上述方法设置后,每次下载数据时,即使使用并行下载的方式,qteasy也不会将所有任务同时提交给进程池,而是分批提交,等待一段时间后,再次提交下一批。

上述功能的稳定版本仍然需要您升级到最新版本v1.1.11,感谢您帮助我逐渐改进qteasy使它更稳定!

roc138 commented 6 months ago

大佬,hist_dnld_delay=60, hist_dnld_delay_evy=600这2个参数太几把好用了,控制间隔时间和数据量。我终于明白了,我被闲鱼坑了,他给的token是共享的,估计是跟别人的同时用的一个token,人太多了导致超过了tushare限制的次数,卖家没和我说是共享的,mmp,害得我试了好多次好几天。

shepherdpp commented 6 months ago

感谢您的反馈!(此问题与 #144 相同)

总结下来,qteasy提供了两种方式解决与下载频率限制相关的问题:

1,递增失败重试等待时间,通过以下三个Config参数控制:

2,直接控制下载批量,并规定等待时间,通过以下两个Config参数控制:

两种方式各有利弊:

1,第一种方式只有碰到失败时才重试,而且重试的等待时间是递增的,因此大多数情况下重试等待时间很短,只有碰到频率限制时才会增加重试时间,因此,如果同时下载多张数据表的数据,且大多数数据表没有频率限制时,用这种方法比较合适,类似于自适应等待时间,但是碰到比较变态的频率限制,如“每小时最多访问5次”(tushare pro的免费版里有不少这样的限制条件),在重试过程中就会把所有的配额用完。导致无法下载

2,第二种方式硬性规定下载批量和等待时间,适用于明确知道规则的情况下,下载单张表数据。如果同时下载多张表,每张表都会应用同样的规则,徒增下载时间,降低效率。

由于这个Issue所涉及的问题与Issue #144 相同,因此建议有相同问题的同学先查看这个问题:从tushare下载数据的2个问题,tushare接口访问频次限制#144