如果我的问题的答案很明显,我很抱歉,因为我是多处理的新手。
我正在尝试用 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 位,并得到了同样的错误。
提前感谢您的任何想法、帮助和建议。