Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BS4 MemoryError:堆栈溢出和EOFError:在python中使用多处理时输入不足_Python_Python 3.x_Beautifulsoup_Multiprocessing - Fatal编程技术网

BS4 MemoryError:堆栈溢出和EOFError:在python中使用多处理时输入不足

BS4 MemoryError:堆栈溢出和EOFError:在python中使用多处理时输入不足,python,python-3.x,beautifulsoup,multiprocessing,Python,Python 3.x,Beautifulsoup,Multiprocessing,我有一个简单的python脚本,它利用python的BS4库和多处理来执行一些web抓取。我最初遇到一些错误,脚本无法完成,因为我会超过递归限制,但后来我发现BeautifulSoup树无法被pickle,因此导致多处理问题,因此我在顶部答案中遵循了一条建议,即执行以下操作:sys.setrecursionlimit(25000) 这在几周内运行良好,没有出现任何问题(据我所知),但今天我重新启动了脚本,一些进程不起作用,我得到的错误如下所示: 我现在得到这个错误: Traceback (mos

我有一个简单的python脚本,它利用python的BS4库和多处理来执行一些web抓取。我最初遇到一些错误,脚本无法完成,因为我会超过递归限制,但后来我发现BeautifulSoup树无法被pickle,因此导致多处理问题,因此我在顶部答案中遵循了一条建议,即执行以下操作:
sys.setrecursionlimit(25000)

这在几周内运行良好,没有出现任何问题(据我所知),但今天我重新启动了脚本,一些进程不起作用,我得到的错误如下所示:

我现在得到这个错误:

Traceback (most recent call last):
  File "C:/Users/user/PycharmProjects/foo/single_items/single_item.py", line 243, in <module>
    Process(target=instance.constant_thread).start()
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\multiprocessing\process.py", line 112, in start
    self._popen = self._Popen(self)
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\multiprocessing\context.py", line 223, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\multiprocessing\context.py", line 322, in _Popen
    return Popen(process_obj)
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\multiprocessing\popen_spawn_win32.py", line 89, in __init__
    reduction.dump(process_obj, to_child)
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\multiprocessing\reduction.py", line 60, in dump
    ForkingPickler(file, protocol).dump(obj)
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\bs4\element.py", line 1449, in __getattr__
    "'%s' object has no attribute '%s'" % (self.__class__, tag))
MemoryError: stack overflow
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\multiprocessing\spawn.py", line 105, in spawn_main
    exitcode = _main(fd)
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\multiprocessing\spawn.py", line 115, in _main
    self = reduction.pickle.load(from_parent)
EOFError: Ran out of input

更新1:
似乎每次崩溃时都是相同的url,即使每个url(看起来)与未崩溃的url具有相同的HTML格式。

我在
中看到了一些问题,而
。什么时候停止?它将继续调用
make\u get\u request
,直到python程序内存耗尽。您能解释一下吗?请求是同步(而非异步)发出的,因此理论上在前一个请求完成之前不应该发出任何请求(由于
while
循环)。任何时候发出的请求数都不会超过创建的进程数,这是在while循环之外决定的。您能举一个失败的URL的例子吗?问题可能与该页面的HTML结构有关。另外,您使用什么代码进行酸洗/取消酸洗?你是直接从漂亮的汤中腌制汤,还是别的什么?如果您提供重现您的问题的代码,将最容易帮助您。
class foo:
    def __init__(url):
        self.url = url

    def constant_scrape:
        while True:
            rq = make_get_request(self.url)
            soup = BeautifulSoup(rq)



if __name__ == '__main__':

    sys.setrecursionlimit(25000)

    url_list = [...]

    for url in url_list:
        instance = foo(url)
        Process(target=instance.constant_scrape).start()