如何加速 Pywikibot?

How to speed up Pywikibot?

我使用 Pywikibot 构建了一些报告工具。随着事情的发展,现在最多需要 2 个小时才能完成报告,所以我希望加快速度。主要思想:

不幸的是,我找不到很多关于缓存和数据库访问的文档。唯一的方法似乎是深入研究代码,好吧,user-config.py 中关于数据库访问的信息有限。如果有的话,我在哪里可以找到关于 pywikibot 缓存和直接数据库访问的好文档?

还有其他方法可以加快速度吗?

使用PreloadingGenerator以便分批加载页面。或者 MySQLPageGenerator 如果您使用直接数据库访问。

查看示例 here

看起来 pagegenerators 确实是加快速度的好方法。最好的文档是 directly in the source.

即使在那里,也不清楚将 MySQL 连接详细信息放在哪里。 (希望会更新。)

使用 pagegenerators 中的 PreloadingGenerator 是加快某些需要从在线维基阅读大量内容的程序的最简单方法,正如其他答案已经指出的那样。

替代方法是:

  • 下载 wiki 转储并在本地阅读。维基媒体项目提供大约每周更新一次的转储。
  • Wikimedia Labs 上创建一个帐户并从那里开始工作,享受与维基百科的更快连接和更新的转储。

修改 throttle 可能会使您面临被阻止的危险,如果目标 wiki 有反对它的政策 - 我恐怕维基百科有这样的政策。

我在命令中使用“-pt:1”选项每秒进行一次编辑。

我目前是运行指挥

python pwb.py category add -pt:1 -file:WX350.txt -to:"Taken with Sony DSC-WX350"

https://www.mediawiki.org/wiki/Manual:Pywikibot/Global_Options

您可以在本站的转储文件中提前下载所有数据 http://dumps.wikimedia.org 然后,您可以使用两次传递——第一次传递从本地转储中读取数据, 然后第二遍只读取您在本地转储中发现问题的远程页面。

示例:

dump_file = hewiktionary-latest-pages-articles.xml.bz2

all_wiktionary = XmlDump(dump_file).parse()
gen = (pywikibot.Page(site, p.title) for p in all_wiktionary if report_problem(p))
gen = pagegenerators.PreloadingGenerator(gen)
for page in gen:
    report_problem(page)
  • Disable throttling, the script is read-only, so page.get(throttle=False) handles this

Page.get() 的“throttle”参数自 Pywikibot 2.0(以前称为重写)以来不受支持,并在 5.0.0 中被删除。 Pywikibot 2.0+ 默认没有激活 get throttle。降低 putthrottle 仅用于将页面放入 wiki,可能会受到当地政策的限制。切勿触摸与服务器相关的 maxlag 参数。

如果您使用多个站点,第一个 运行 需要很多时间才能缓存所有站点对象。 PreloadingGenerator 可用于批量加载页面内容,但如果仅需要元数据,则会降低速度。总之,加速您的脚本取决于您的实施和您的需要。