【发布时间】:2011-02-20 21:34:25
【问题描述】:
我使用的程序来自: here
一次下载多个网址。它工作正常,但是接收到的队列中 url 的顺序与它们在 urls 列表中的顺序不同,而且它也不是恒定的(从运行到运行的变化)。
我该怎么做才能使它们的顺序保持不变或知道哪个 url 属于接收到的队列中的哪个索引。
谢谢。
【问题讨论】:
标签: python multithreading urllib2
我使用的程序来自: here
一次下载多个网址。它工作正常,但是接收到的队列中 url 的顺序与它们在 urls 列表中的顺序不同,而且它也不是恒定的(从运行到运行的变化)。
我该怎么做才能使它们的顺序保持不变或知道哪个 url 属于接收到的队列中的哪个索引。
谢谢。
【问题讨论】:
标签: python multithreading urllib2
把fetch改成这样:
def fetch(url):
return (url, urllib2.urlopen(url).read())
你得到一个充满元组的队列,而不是一个充满字符串的队列,每个字符串都包含一个结果。
您将无法取回一个队列,其中的事物总是相同的顺序,因为多线程对于这样的事情不是确定性的。所以最好的办法是确保每个东西都被标记,以便您以后识别它。
【讨论】:
您可以将索引号添加到 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, data)。