TypeError(“无法pickle '_io.BufferedReader'对象”)

NYT*_*NYT 5 python multiprocessing google-search python-3.x python-multiprocessing

我是多处理新手,我正在尝试编写一个程序来获取 google 上搜索查询的前 10 个结果。在此示例中,我只想同时运行 2 个搜索查询。这是我所拥有的:

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)
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,出现以下错误:

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")'
Run Code Online (Sandbox Code Playgroud)

我还没有找到任何解决这个问题的地方。任何帮助是极大的赞赏!

我已将其范围缩小到 .append 部分,但我不确定如何解决此问题。关于这个问题有很多文章,但没有答案。

小智 5

我希望这还不算太晚。我尝试使用多处理池进行映射时遇到了同样的错误。我所做的是切换到 ThreadPoolExecutor,与多处理池的用法相同。

from concurrent import futures

with futures.ThreadPoolExecutor(10) as executor:
    hocr_data = executor.map(convert_pdf_to_hocr, image_pdf_pages)
Run Code Online (Sandbox Code Playgroud)

试一试。