1

編集貢献を分析するウィキペディア ボットを開発しています。残念ながら、1 回の実行を完了するのに何時間もかかります。その間、ウィキペディアのデータベース レプリケーションの遅延 (実行中のある時点) は、5 秒 (デフォルトの maxlag 値) を確実に超えます。API の maxlag パラメータの推奨事項は、ラグ エラーを検出し、X 秒間一時停止してから再試行することです。

しかし、私がしているのは、次の投稿を読むことだけです。

usrpg = pywikibot.Page(site, 'User:' + username)
usr = pywikibot.User(usrpg)
for contrib in usr.contributions(total=max_per_user_contribs):
    # (analyzes contrib here)

エラーを検出して再開する方法は? これはエラーです:

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.

そのコード行でスローされた例外をキャッチすることが思い浮かびます。

 raise APIError(**result['error'])

しかし、ユーザーの貢献を再開することは非常に非効率的です。一部のユーザーは 400,000 回の編集を行っているため、最初からやり直すのはかなりの後退です。

これを行う例(エラーを検出して再試行する)をグーグルで検索しましたが、何も役に立ちませんでした。

4

1 に答える 1