Python: проблемы травления с пафосом и селеном - PullRequest
0 голосов
/ 12 сентября 2018

Извините, если ответ на мой вопрос очевиден, так как я новичок в многопроцессорной обработке.

Я пытаюсь написать многопроцессорный сценарий очистки веб-страниц с пафосом. Я выбрал пафос, поскольку, насколько я понимаю, в отличие от традиционного модуля многопроцессорной обработки Python, он неуязвим для выбора проблем и не требует наличия каждой функции или класса в модуле верхнего уровня.

В общем, псевдокод того, что я пытаюсь сделать, выглядит так:

from functools import partial
from pathos.multiprocessing import ProcessPool as Pool
from selenium import webdriver


def get_urls(main_page):
    """Extracts URLs from a website's main page; returns list."""
    return urls


def extract_text(url, web_driver):
    """Gets selenium.webdriver instance and an URL as arguments;
       extracts text from this url; returns string"""
    return text


if __name__ == '__main__':

    MAINPAGE = "http://some/link/for/scraping"
    driver = webdriver.Chrome("path/to/chrome/binary")
    myLinks = get_urls(MAINPAGE)
    pool = Pool(nodes=4)
    part_text = partial(extract_text, web_driver=driver)
    results = pool.map(part_text, myLinks)

    print(results)

Тем не менее, несмотря на то, что я правильно установил укроп и импортировал _multiprocessing без проблем, я всегда получаю следующую ошибку при запуске своего кода:

Traceback (most recent call last):
   File "D:\Anaconda\lib\site-packages\dill\_dill.py", line 688, in _create_filehandle
   f = open(name, mode)
   OSError: [WinError 6] The handle is invalid

А также:

_pickle.UnpicklingError: [WinError 6] The handle is invalid

Может ли это быть проблема, специфичная для Windows? К сожалению, хотя я лично предпочитаю Linux, этот сценарий должен быть запущен на 64-битной машине с Windows 10. Я попробовал оба Python 3.6 (Anaconda 64bit) и Python 3.7 32bit на двух компьютерах с Windows 10 и получил ту же ошибку.

Заранее спасибо за любые идеи, помощь и предложения.

...