Порядок файлов, загружаемых многопоточной программой, не является постоянным - PullRequest
0 голосов
/ 21 февраля 2011

Я использую программу из: здесь

, чтобы загрузить много URL одновременно.Он работает нормально, но порядок URL-адресов в очереди, который получен, не совпадает с их порядком в списке URL-адресов, и он также не постоянен (меняется от запуска к запуску).

Что я могу сделать, чтобы сделать их порядок постоянным или узнать, какой URL принадлежит тому или иному индексу в очереди, которая получена.

Ответы [ 2 ]

3 голосов
/ 21 февраля 2011

Измените fetch следующим образом:

def fetch(url):
    return (url, urllib2.urlopen(url).read())

Вместо очереди, полной строк, каждая из которых содержит результат, вы получаете очередь, полную кортежей, каждый кортеж, содержащий URL, затем результат.

Вы не сможете вернуть очередь, в которой все всегда в одном порядке, потому что многопоточность не является детерминированной в таких вещах. Поэтому лучше всего убедиться, что каждая вещь помечена, чтобы вы могли идентифицировать ее позже.

1 голос
/ 21 февраля 2011

Вы можете просто добавить индексный номер к 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 ...
...