类型错误( "cannot pickle '_io.BufferedReader' object" )



我是多处理的新手,我正试图编写一个程序,在谷歌上获得搜索查询的前10个结果。在这个例子中,我只想同时运行两个搜索查询。这是我所拥有的:

import threading
from multiprocessing.pool import Pool
import pycountry
import bs4
import requests
from googlesearch import search
def getGoogleResults(query):
links = []
# from geeks4geeks
print("Getting google results...")
for j in search(query, tld="co.in", num=10, stop=10, pause=2):
links.append(j)
print("Got google results!")
return links
global queryResults
queryResults = {}
queries = ["stackoverflow", "github"]
if __name__ == "__main__":
with Pool(2) as p:
p.map(getGoogleResults, queries)

然而,当我运行它时,我会得到以下错误:

File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/multiprocessing/pool.py", line 771, in get
raise self._value
multiprocessing.pool.MaybeEncodingError: Error sending result: '<multiprocessing.pool.ExceptionWithTraceback object at 0x101b23820>'. Reason: 'TypeError("cannot pickle '_io.BufferedReader' object")'

我找不到任何地方可以解决这个问题。非常感谢您的帮助!

我已经把它缩小到.append部分,但我不知道如何解决这个问题。关于这个问题有很多文章,但没有答案。

我希望现在还为时不晚。我在尝试映射多处理池时也遇到了同样的错误。我所做的是切换到ThreadPoolExecutor,与多处理池的用法相同。

from concurrent import futures
with futures.ThreadPoolExecutor(10) as executor:
hocr_data = executor.map(convert_pdf_to_hocr, image_pdf_pages)

试试看。

最新更新