【问题标题】: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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        替代方法是:

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

        如果目标 wiki 有针对它的政策,修改 throttle 可能会使您面临被阻止的危险——我担心 Wikipedia 有这样的政策。

        【讨论】:

          【解决方案4】:

          我在命令中使用“-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

          【讨论】:

          • 这是边界线link-only answer。您应该在此处扩展您的答案以包含尽可能多的信息,并使用该链接仅供参考。
          【解决方案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 可用于批量加载页面内容,但如果仅需要元数据,则会降低速度。总之,加快您的脚本速度取决于您的实施和您的需要。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-03-25
              • 2016-05-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-07-08
              • 1970-01-01
              相关资源
              最近更新 更多