Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Python > Дополнительные параметры в ThreadPool(threads).imap_unordered


Автор: diel 01.09.16, 03:15
Подскажите пожалуйста, как можно расширить код, чтобы была поддержка добавить во многопоточное приложение дополнительных параметров так, чтобы все они так же учитывались.

То есть например, есть просто параметр:
urls = {
список ссылок
}

Программа в многопоточном режиме обходит каждую ссылку.
Я же хочу

urls = {
список ссылок
}

data = {
список данных
}

Количество ссылок умножаются на количество данных.

Приведу свой новичковый код, может намекнете.
С меня плюсики за любые наводки

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    #!/usr/bin/env python
    from multiprocessing.pool import ThreadPool
    from time import time as timer
    import urllib
    import urllib2
     
    threads = 50
    timeout = 5
     
    urls = open("urls.txt").read().splitlines()
    # TODO: добавить дополнительный параметр
    data = open("data.txt").read().splitlines()
     
    def check_urls(url):
     
        try:
     
            values = {
                # здесь будут передаваться данные
                # TODO: в идеале и третий параметр это рандомный юзерагент
            }
     
            headers = {
                "Content-Type": "application/x-www-form-urlencoded",
                "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 OPR/37.0.2178.43"
            }
     
            tstart = timer()
            post = urllib.urlencode(values)
            request = urllib2.Request(url, post, headers)
            response = urllib2.urlopen(request, timeout=timeout)
            return url, response, None, tstart
     
        except Exception as e:
            return url, None, e
     
    start = timer()
     
    results = ThreadPool(threads).imap_unordered(check_url, urls)
     
    for url, body, error, tstart in results:
        if error is None:
            status = body.read()
            # ...
        #else:
            #print("error")
     
    print("Elapsed time: %s" % (timer() - start))

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)