当前位置:  开发笔记 > 编程语言 > 正文

Python线程stack_size和segfaults

如何解决《Python线程stack_size和segfaults》经验,为你挑选了1个好方法。

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

我正在为线程设置stack_size为756K

threading.stack_size(756*1024)

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

stack_sizes超过756K使得无法同时拥有所需数量的线程.

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



1> nosklo..:

为什么你要产生500个线程呢?这似乎是个糟糕的主意!

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

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

我建议使用Twisted - 它是一个事件驱动的网络引擎.它非常灵活,安全,可扩展且非常稳定(没有段错误).

您还可以看一下Scrapy - 它是一个用Python/Twisted编写的网页抓取和屏幕抓取框架.它仍处于重大发展阶段,但也许你可以采取一些想法.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有