首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pywikibot中最大滞后异常的检测

pywikibot中最大滞后异常的检测
EN

Stack Overflow用户
提问于 2016-08-16 17:04:37
回答 1查看 156关注 0票数 1

我正在开发一个维基百科机器人来分析编辑贡献。不幸的是,完成一次运行需要几个小时,在此期间,Wikipedia的数据库复制延迟--在运行过程中的某个时刻--肯定会超过5秒(默认的maxlag值)。API最大滞后参数中的建议是检测滞后错误,暂停X秒,然后重试。

但我所做的只是阅读投稿:

代码语言:javascript
复制
usrpg = pywikibot.Page(site, 'User:' + username)
usr = pywikibot.User(usrpg)
for contrib in usr.contributions(total=max_per_user_contribs):
    # (analyzes contrib here)

如何检测错误并恢复?这是一个错误:

代码语言:javascript
复制
WARNING: API error maxlag: Waiting for 10.64.32.21: 7.1454429626465 seconds lagged
Traceback (most recent call last):
  File ".../bot/core/pwb.py", line 256, in <module>
    if not main():
  File ".../bot/core/pwb.py", line 250, in main
    run_python_file(filename, [filename] + args, argvu, file_package)
  File ".../bot/core/pwb.py", line 121, in run_python_file
    main_mod.__dict__)
  File "analyze_activity.py", line 230, in <module>
    attrs = usr.getprops()
  File ".../bot/core/pywikibot/page.py", line 2913, in getprops
    self._userprops = list(self.site.users([self.username, ]))[0]
  File ".../bot/core/pywikibot/data/api.py", line 2739, in __iter__
    self.data = self.request.submit()
  File ".../bot/core/pywikibot/data/api.py", line 2183, in submit
    raise APIError(**result['error'])
pywikibot.data.api.APIError: maxlag: Waiting for 10.64.32.21:
    7.1454 seconds lagged [help:See https://en.wikipedia.org/w/api.php for API usage]
<class 'pywikibot.data.api.APIError'>
CRITICAL: Closing network session.

我想到要捕获代码行中抛出的异常:

代码语言:javascript
复制
 raise APIError(**result['error'])

但是,重新启动对用户的贡献似乎非常低效。一些用户有40万个编辑,所以重新运行从一开始就有很多倒退。

我搜索了一些这样做的例子(检测错误并重新尝试),但是我没有发现任何有用的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-21 09:47:10

将评论中的前一次对话转换为答复。

解决这一问题的一种可能方法是尝试/捕获错误并重做导致错误的代码段。

但是,pywikibot已经在内部为我们做了这件事!Pywikibot,默认情况下,如果使用它生成的默认user-config.py,将尝试重试每个失败的API调用2次。我发现,在我的情况下,增加以下的吐露对我是有好处的:

  • 最大时差= 20
  • retry_wait = 20
  • max_retries =8

maxlag是根据麦克斯拉格参数文档推荐增加的参数,特别是当您在短时间内完成大量写操作时。但是,retry_waitmax_retries的信任对于其他人写很多东西是有用的(就像我的情况:我的脚本刚刚从wiki读取)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38980652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档