【问题标题】:Python threads stack_size and segfaultsPython 线程 stack_size 和 segfaults
【发布时间】:2010-09-28 12:52:52
【问题描述】:

一个网络爬虫脚本,最多生成 500 个线程,每个线程基本上都请求从远程服务器提供的某些数据,每个服务器的回复在内容和大小上都与其他服务器不同。

我将线程的 stack_size 设置为 756K

threading.stack_size(756*1024)

这使我能够拥有足够数量的所需线程并完成大部分工作和请求。但是由于某些服务器的响应比其他服务器大,并且当一个线程获得这种响应时,脚本会因 SIGSEGV 而死。

stack_sizes 超过 756K 使得不可能同时拥有所需数量的线程。

关于如何在不崩溃的情况下继续使用给定的 stack_size 的任何建议? 以及如何获取任何给定线程的当前使用的 stack_size?

【问题讨论】:

    标签: python multithreading segmentation-fault stack-size


    【解决方案1】:

    为什么你要生成 500 个线程?这似乎是一个可怕的主意!

    完全删除线程,使用事件循环进行爬取。您的程序将更快、更简单、更易于维护。

    大量等待网络的线程不会让您的程序等待得更快。相反,将所有打开的套接字收集在一个列表中并运行一个循环,检查其中是否有任何可用的数据。

    我推荐使用Twisted - 它是一个事件驱动的网络引擎。它非常灵活、安全、可扩展且非常稳定(无段错误)。

    你也可以看看Scrapy - 这是一个用 Python/Twisted 编写的网络爬取和屏幕抓取框架。它仍在大力开发中,但也许您可以提出一些想法。

    【讨论】:

    • +1 以获得好的答案。此外,OP 应该确保他正在下载压缩后的响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2012-10-04
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多