如何加速 Pywikibot?
How to speed up Pywikibot?
我使用 Pywikibot 构建了一些报告工具。随着事情的发展,现在最多需要 2 个小时才能完成报告,所以我希望加快速度。主要思想:
- 禁用限制,脚本是只读的,所以
page.get(throttle=False)
处理这个
- 缓存
- 直接数据库访问
不幸的是,我找不到很多关于缓存和数据库访问的文档。唯一的方法似乎是深入研究代码,好吧,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 可用于批量加载页面内容,但如果仅需要元数据,则会降低速度。总之,加速您的脚本取决于您的实施和您的需要。
我使用 Pywikibot 构建了一些报告工具。随着事情的发展,现在最多需要 2 个小时才能完成报告,所以我希望加快速度。主要思想:
- 禁用限制,脚本是只读的,所以
page.get(throttle=False)
处理这个 - 缓存
- 直接数据库访问
不幸的是,我找不到很多关于缓存和数据库访问的文档。唯一的方法似乎是深入研究代码,好吧,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 可用于批量加载页面内容,但如果仅需要元数据,则会降低速度。总之,加速您的脚本取决于您的实施和您的需要。