处理Python线程模块的顺序

时间:2012-04-02 16:57:01

标签: python web-crawler python-2.7

我正在编写一个网络抓取工具,可以同时处理多个网址,并按以下方式工作:

  1. 它从seed_list.txt中包含的网址列表中获取网址,

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

  3. 就像大多数网页抓取工作一样。

    当我使用单线程时,我可以使用seed_list.txt中URL的顺序获取data.txt中的数据,但是当它是多线程时,我似乎无法控制它,因为每个线程一旦完成就将数据写入data.txt。

    有没有办法让我的网络抓取工具多线程但保留原始订单?

    非常感谢!


    @Lance,Ignacio和Maksym,

    谢谢大家的帮助 - 你的答案肯定会指出我正确的方向。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

此“输出”主题可以对结果进行排序/过滤。