绕过操作系统线程限制的编程策略?

3 投票
11 回答
2827 浏览
提问于 2025-04-15 17:33

场景是这样的:我们有一个Python脚本,它同时检查成千上万的代理。这个程序使用线程,每个代理一个线程,以加快处理速度。当线程数量达到1007时,脚本就会崩溃,因为超过了线程的限制。
我的解决办法是:使用一个全局变量,当一个线程启动时这个变量加1,当一个线程结束时这个变量减1。负责启动线程的函数会监控这个变量,以确保不会超过限制。
你们的解决办法是什么呢,朋友们?

谢谢大家的回答。

11 个回答

3

Python有没有什么异步输入输出的功能呢?我觉得如果有的话,这会是最好的答案。因为为每个出去的连接启动一个额外的线程并不是很优雅,拥有一个有效的事件驱动的单线程会更好。

4

我之前遇到过这种情况。你只需要创建一个任务池,然后启动固定数量的线程,让它们不断循环,从任务池中获取一个任务,执行它,然后再重复这个过程。简单来说,你就是在自己实现一个线程的抽象,并利用操作系统的线程来实现它。

不过这样做也有缺点,最大的一个问题是,如果你的任务长时间被阻塞,就会影响其他任务的执行。但这样做可以让你创建无限数量的任务,唯一的限制就是内存的大小。

5

你想要使用 select模块 来进行非阻塞的输入输出操作。

这里有几种不同的具体方法。select.select 这个方法在所有主要的平台上都能用。还有一些其他的变种方法,它们效率更高(如果你同时要检查成千上万的连接,这点就很重要),但那样的话你就需要为你特定的平台编写代码了。

撰写回答