Python 线程 stack_size 和段错误

2024-02-13

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

我将线程的 stack_size 设置为 756K

threading.stack_size(756*1024)

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

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

关于如何继续使用给定的 stack_size 而不会崩溃有什么建议吗? 我怎样才能获得任何给定线程当前使用的 stack_size ?


Why你到底生成了 500 个线程吗?这似乎是一个糟糕的主意!

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

很多等待网络的线程不会让你的程序等得快一点。相反,收集列表中的所有打开的套接字并运行一个循环,检查其中是否有可用的数据。

我建议使用Twisted http://twistedmatrix.com- 它是一个事件驱动的网络引擎。它非常灵活、安全、可扩展并且非常稳定(无段错误)。

您还可以看一下Scrapy http://scrapy.org/- 它是一个用 Python/Twisted 编写的网络爬行和屏幕抓取框架。它仍在大力开发中,但也许您可以采取一些想法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 线程 stack_size 和段错误 的相关文章

随机推荐