【问题标题】:How to speed up Pywikibot?如何加速 Pywikibot?
【发布时间】:2015-12-06 17:12:51
【问题描述】:
我使用Pywikibot 构建了一些报告工具。随着事情的发展,现在完成报告最多需要 2 个小时,所以我希望加快速度。主要观点:
- 禁用限制,脚本是只读的,所以
page.get(throttle=False) 处理这个
- 缓存
- 直接数据库访问
不幸的是,我找不到太多关于缓存和数据库访问的文档。唯一的方法似乎是深入代码,而且user-config.py 中关于数据库访问的信息有限。如果有的话,我在哪里可以找到关于 pywikibot 缓存和直接数据库访问的好文档?
还有,还有其他方法可以加快速度吗?
【问题讨论】:
标签:
python
mediawiki
pywikibot
【解决方案1】:
使用PreloadingGenerator 以便分批加载页面。或者MySQLPageGenerator,如果您使用直接数据库访问。
查看示例here。
【解决方案3】:
正如其他答案已经指出的那样,使用 pagegenerators 中的 PreloadingGenerator 是加速某些需要大量阅读在线 wiki 的程序的最简单方法。
替代方法是:
- 下载 wiki 的转储文件并在本地阅读。维基媒体项目提供大约每周更新一次的转储。
- 在Wikimedia Labs 上创建一个帐户,然后从那里享受与维基百科的更快连接和更新的转储。
如果目标 wiki 有针对它的政策,修改 throttle 可能会使您面临被阻止的危险——我担心 Wikipedia 有这样的政策。
【解决方案5】:
您可以在本网站的转储文件中预先下载所有数据
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)
【解决方案6】:
- 禁用限制,脚本是只读的,所以 page.get(throttle=False) 处理这个
Page.get() 的“throttle”参数自 Pywikibot 2.0(以前称为 rewrite)以来不受支持,并在 5.0.0 中被删除。 Pywikibot 2.0+ 默认没有激活获取限制。减少 putthrottle 仅用于将页面放入 wiki,可能会受到当地政策的限制。切勿触摸与服务器相关的 maxlag 参数。
如果您使用多个站点,则第一次运行需要很长时间才能缓存所有站点对象。 PreloadingGenerator 可用于批量加载页面内容,但如果仅需要元数据,则会降低速度。总之,加快您的脚本速度取决于您的实施和您的需要。