Извините, если ответ на мой вопрос очевиден, так как я новичок в многопроцессорной обработке.
Я пытаюсь написать многопроцессорный сценарий очистки веб-страниц с пафосом. Я выбрал пафос, поскольку, насколько я понимаю, в отличие от традиционного модуля многопроцессорной обработки 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 и получил ту же ошибку.
Заранее спасибо за любые идеи, помощь и предложения.