Python 多线程程序下载文件的顺序不是恒定的

Python 多线程程序下载文件的顺序不是恒定的,python,multithreading,urllib2,Python,Multithreading,Urllib2,我正在从以下位置使用程序: 一次下载多个URL。它工作正常,但接收到的队列中URL的顺序与其在URL列表中的顺序不同,而且也不是常量(从运行到运行的变化) 我可以做些什么来使它们的顺序保持不变,或者知道哪个url属于接收到的队列中的哪个索引 谢谢。您只需将索引号添加到URL urls = [ (0, 'http://www.google.com/'), (1, 'http://www.lycos.com/'), (2, 'http://www.bing.com/'),

我正在从以下位置使用程序:

一次下载多个URL。它工作正常,但接收到的队列中URL的顺序与其在URL列表中的顺序不同,而且也不是常量(从运行到运行的变化)

我可以做些什么来使它们的顺序保持不变,或者知道哪个url属于接收到的队列中的哪个索引


谢谢。

您只需将索引号添加到URL

urls = [
    (0, 'http://www.google.com/'),
    (1, 'http://www.lycos.com/'),
    (2, 'http://www.bing.com/'),
    (3, 'http://www.altavista.com/'),
    (4, 'http://achewood.com/'),
]

def fetch(index, url):
    data = urllib2.urlopen(url).read()
    # ... do whatever you need using index ...

您只需将索引号添加到URL

urls = [
    (0, 'http://www.google.com/'),
    (1, 'http://www.lycos.com/'),
    (2, 'http://www.bing.com/'),
    (3, 'http://www.altavista.com/'),
    (4, 'http://achewood.com/'),
]

def fetch(index, url):
    data = urllib2.urlopen(url).read()
    # ... do whatever you need using index ...

更改
fetch
如下:

def fetch(url):
    return (url, urllib2.urlopen(url).read())
首先,不是一个充满字符串的队列,每个字符串包含一个结果,而是一个充满元组的队列,每个元组包含url,然后是一个结果


您将无法返回一个队列,在该队列中,事情总是以相同的顺序进行,因为多线程对于类似的事情是不确定的。因此,最好的办法是确保每个东西都有标签,以便以后可以识别。

更改
获取
如下:

def fetch(url):
    return (url, urllib2.urlopen(url).read())
首先,不是一个充满字符串的队列,每个字符串包含一个结果,而是一个充满元组的队列,每个元组包含url,然后是一个结果


您将无法返回一个队列,在该队列中,事情总是以相同的顺序进行,因为多线程对于类似的事情是不确定的。因此,最好的办法是确保每件东西都贴上标签,以便以后识别。

请详细说明一下好吗?我不明白这会有什么帮助。URL已被索引。你可以做URL.index(google.com)。。。。感谢如果您在收到特定URL后需要执行其他多线程处理,那么在fetch函数中使用索引可能会有所帮助。如果您只需要知道哪些数据来自哪个url,那么您可以按照Omnifarious的建议获取返回的
(url,数据)
。您能详细说明一下吗?我不明白这会有什么帮助。URL已被索引。你可以做URL.index(google.com)。。。。感谢如果您在收到特定URL后需要执行其他多线程处理,那么在fetch函数中使用索引可能会有所帮助。如果您只需要知道哪个数据来自哪个url,那么您只需按照Omnifarious的建议获取返回的
(url,数据)