Python终止某些线程

2024-04-20 09:44:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码,其中我正在抓取多个网站:

while len(newData) > 0:
    for i in newData:
        try:
            thread.start_new_thread(download, (i))
        except Exception, thread.error:
            pass

然而,我的问题是,它是做重复和刮每个网站几次。在下载函数中,一旦它被下载,我就会从newData中删除url,这样就不会再打开线程了。如果某个任务已经完成,我如何杀死所有试图执行该任务的线程?这是我第一次尝试线程,不知道我是否这样做的正确方式


Tags: 代码innewforlen网站downloadexception
2条回答

首先,您可能想研究一下http://scrapy.org/,它是一个很好的web抓取框架

当你现在这样做的时候,你需要编写线程管理器,它将保存所有线程的句柄,用某种符号表示它们的内部内容(比如url的校验和),一旦完成了某个校验和,就用这个校验和杀死其他线程

但请记住,像这样直接终止线程并不是一个好主意,更好的解决方案是实现一个队列,确保您不会解析重复的线程,而只为那些线程创建线程。有一些nice examples of worker pooling and queues in the official manual,所以看一看

与其自己动手,不如创建一个队列。将包含启动任务所需的所有数据的对象放入队列。创建等待队列中元素的工作线程池。让他们将结果放入另一个(输出/结果)队列

启动时,创建包含URL等的数据对象,并将它们全部放入队列中

然后您只需要等待结果进入输出队列

相关问题 更多 >