很抱歉,我的问题的答案很明显,因为我是多处理的完全新手。
我正在尝试编写一个带有悲哀的多进程网络抓取脚本。我之所以选择“悲痛”,是因为据我所知,与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,但是该脚本需要在Windows 10 64位计算机上运行。我在两台Windows 10计算机上都尝试了Python 3.6(Anaconda 64位)和Python 3.7 32位,并得到了相同的错误。
在此先感谢您的任何想法,帮助和建议。