Многопроцессорность с Python, выполнение никогда не завершается - PullRequest
0 голосов
/ 13 марта 2019

Новое в многопроцессорной обработке! пожалуйста, помогите.

Все библиотеки импортированы, метод get_links работает, я тестировал его на одном случае. Попытка заставить метод работать для нескольких URL, предназначенных для параллельных процессов, чтобы сделать его быстрее. Без многопроцессорной обработки мое время выполнения составляет 10 часов +

Редактировать 2:

Попробовал все возможное на MCVE

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
from multiprocessing import Pool

options = Options()
options.headless = True
options.binary_location = 'C:\\Users\\Liam\\AppData\\Local\\Google\\Chrome SxS\\Application\\Chrome.exe'
options.add_argument('--blink-settings=imagesEnabled=false')
options.add_argument('--no-sandbox')
options.add_argument("--proxy-server='direct://'")
options.add_argument("--proxy-bypass-list=*")

subsubarea_urls = []
with open('subsubarea_urls.txt') as f:
    for item in f:
        item = item.strip()
        subsubarea_urls.append(item)

test_urls = subsubarea_urls[:3] 

def get_links(url):

    driver = webdriver.Chrome('....\Chromedriver', chrome_options=options)
    driver.get(url)
    soup = BeautifulSoup(driver.page_source, 'html.parser')
    link = soup.find(class_ = 'listings__all')
    if link is not None:
        link = "example.com" + link.find('a')['href']
    driver.close()
    return link

def main():

    how_many = 3
    p = Pool(processes = how_many)
    data = p.map(get_links, test_urls)
    p.close()

    with open('test_urls.txt', 'w') as f:
        f.write(str(data))

if __name__ == '__main__':
    main()

1 Ответ

0 голосов
/ 13 марта 2019

Неожиданно проблема не была связана с кодом.Многопроцессорность в python, похоже, не похожа на Windows GUI, так как подпроцессы, вызываемые Pool, не имеют потоков std.Код должен быть выполнен в IDLE python -m idlelib.idle (чтобы открыть IDLE)

См. Ответ Терри Яна Риди здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...