Closed roc138 closed 6 months ago
我能想到的原因仍然可能是并行下载过程中有太多的进程并行下载,导致一分钟之内反复尝试的次数超过了600次。 我想这时应该借助另外两个配置参数了:
QT_CONFIG.hist_dnld_delay
: 默认值为0,如果设置为一个大于0的整数,表示分批下载时每批的下载数量QT_CONFIG.hist_dnld_delay_evy
: 默认值为0,如果设置为一个大于0的整数,表示两个下载批次之间等待的秒数以下配置可以使得每下载600组数据就等待一分钟:
qt.configure(hist_dnld_delay=60, hist_dnld_delay_evy=600)
qt.configure(hist_dnld_retry_cnt=3) # 同时减少重试的次数以缩短报错前等待的时间,这个配置并不是必要的
按照上述方法设置后,每次下载数据时,即使使用并行下载的方式,qteasy
也不会将所有任务同时提交给进程池,而是分批提交,等待一段时间后,再次提交下一批。
上述功能的稳定版本仍然需要您升级到最新版本v1.1.11,感谢您帮助我逐渐改进qteasy
使它更稳定!
大佬,hist_dnld_delay=60, hist_dnld_delay_evy=600这2个参数太几把好用了,控制间隔时间和数据量。我终于明白了,我被闲鱼坑了,他给的token是共享的,估计是跟别人的同时用的一个token,人太多了导致超过了tushare限制的次数,卖家没和我说是共享的,mmp,害得我试了好多次好几天。
感谢您的反馈!(此问题与 #144 相同)
总结下来,qteasy
提供了两种方式解决与下载频率限制相关的问题:
1,递增失败重试等待时间,通过以下三个Config
参数控制:
QT_CONFIG.hist_dnld_retry_cnt
- 下载数据时失败重试的次数,默认为7次QT_CONFIG.hist_dnld_retry_wait
- 第一次下载失败时的等待时长,单位为秒,默认为1秒QT_CONFIG.hist_dnld_backoff
- 等待后仍然失败时等待时间的倍增乘数,默认为2倍2,直接控制下载批量,并规定等待时间,通过以下两个Config参数控制:
QT_CONFIG.hist_dnld_delay
: 默认值为0,如果设置为一个大于0的整数,表示分批下载时每批的下载数量QT_CONFIG.hist_dnld_delay_evy
: 默认值为0,如果设置为一个大于0的整数,表示两个下载批次之间等待的秒数两种方式各有利弊:
1,第一种方式只有碰到失败时才重试,而且重试的等待时间是递增的,因此大多数情况下重试等待时间很短,只有碰到频率限制时才会增加重试时间,因此,如果同时下载多张数据表的数据,且大多数数据表没有频率限制时,用这种方法比较合适,类似于自适应等待时间,但是碰到比较变态的频率限制,如“每小时最多访问5次”(tushare pro
的免费版里有不少这样的限制条件),在重试过程中就会把所有的配额用完。导致无法下载
2,第二种方式硬性规定下载批量和等待时间,适用于明确知道规则的情况下,下载单张表数据。如果同时下载多张表,每张表都会应用同样的规则,徒增下载时间,降低效率。
由于这个Issue
所涉及的问题与Issue #144 相同,因此建议有相同问题的同学先查看这个问题:从tushare下载数据的2个问题,tushare接口访问频次限制#144
仔细看了一下还是有报错,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