2

如果我的问题的答案很明显,我很抱歉,因为我是多处理的新手。

我正在尝试用 pathos 编写一个多处理的网络抓取脚本。我之所以选择 pathos,是因为据我了解,与 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)

尽管如此,尽管我正确安装了 dill 并且 _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,但这个脚本需要在 Windows 10 64 位机器上运行。我在两台 Windows 10 机器上尝试了 Python 3.6(Anaconda 64 位)和 Python 3.7 32 位,并得到了同样的错误。

提前感谢您的任何想法、帮助和建议。

4

0 回答 0