【问题标题】:Processing Order of Python's Threading ModulePython的线程模块的处理顺序
【发布时间】:2012-04-02 16:57:01
【问题描述】:

我正在编写一个同时处理多个 URL 的网络爬虫,工作方式如下:

  1. 它从包含在seed_list.txt 中的URL 列表中获取一个URL,

  2. 它抓取它并将数据写入data.txt;

就像大多数网络爬虫的工作方式一样。

当我使它成为单线程时,我可以按照与seed_list.txt中的URL相同的顺序获取data.txt中的数据,但是当它是多线程时,我似乎无法控制它,因为每个线程在完成后将数据写入 data.txt。

有没有一种方法可以让我的网络爬虫多线程但保持原来的顺序?

非常感谢!


@Lance、Ignacio 和 Maksym,

感谢大家的帮助——你们的回答肯定为我指明了正确的方向。

【问题讨论】:

    标签: python web-crawler python-2.7


    【解决方案1】:

    创建一个额外的线程,负责枚举每个爬虫线程的结果。

    【讨论】:

      【解决方案2】:

      您可以创建一个类,该类具有来自seed_list.txt 的行的索引号、URL 以及来自网络的数据。可以使用行号和 URL 创建这种类型的对象,然后将其传递给将数据放入对象的工作线程,然后将对象传递给写入线程,该线程将按行对对象进行排序编号并根据需要输出数据。

      【讨论】:

        【解决方案3】:

        您可以运行一个特殊的线程来输出数据并通过队列与之交互。我的意思是您的“爬行”线程不会将结果写入文本文件,而是将其放入队列中。

        此“输出”线程可以对您的结果进行排序/过滤。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-29
          相关资源
          最近更新 更多