Зависание многопроцессорных запросов Python Pool - PullRequest
1 голос
/ 10 мая 2019

Код в моей программе, по сути, выполняет 10 запросов Python одновременно и одновременно обрабатывает их вывод, это работало некоторое время, но я что-то изменил и не могу понять, что его сломало.

Следующий код является кодом, который вызывает, код кажется зависшим между строками 3 и 4, поэтому в процессе выполнения многопоточных запросов.

Строка 'print («не удалось закрыть») не печатается, что указывает на то, что программа не достигает инструкции pool.close ().

listoftensites = listoftensites
pool = Pool(processes=10) # Initalize a pool of 10 processes
listoftextis, listofonline = zip(*pool.map(onionrequestthreaded, listoftensites)) # Use the pool to run the function on the items in the iterable
print("failed to close ")
pool.close()
 # this means that no more tasks will be added to the pool
pool.join() 

Функция, которая вызывается, в которой она зависает, сразу после строки «print (« fail in return »)», это может указывать на то, что запросы не завершаются должным образом и возвращают ожидаемые значения.

def onionrequestthreaded(onionurl):
    session = requests.session()
    session.proxies = {}
    session.proxies['http'] = 'socks5h://localhost:9050'
    session.proxies['https'] = 'socks5h://localhost:9050'

    onionurlforrequest = "http://" + onionurl
    #print(onionurlforrequest)
    print("failed with proxy session")
    try:
        print("failed in request")
        r = session.get(onionurlforrequest, timeout=15, allow_redirects=True)
        online = 2
        print("failed in text extraction")

        textis = r.text
    except:
        print("failed in except")

        #print("failed")
        online = 1

        textis = ""
    print("failed in return")
    return textis, online

Очень запутанно, но я, вероятно, делаю что-то простое. Пожалуйста, дайте мне знать, если есть решение, потому что я выдергиваю свои волосы.

...