python使用threadpool库抛异常can’t start new thread

写了个数据同步的工具跑了一晚上,第二天起来发现一堆异常

can’t start new thread

猜想是python创建的线程过多导致无法创建新的线程,因为操作系统的每个进程能开启的线程数量是有限的。

用任务管理器查看,卧槽852个线程。。

 

本以为threadpool的创建的线程执行完就会关闭,事实上默认情况下python的父进程关闭后,子进程才会关闭。

而我的程序中,创建线程池的相关代码放在了一个方法中,这个方法会被循环调用,即使局部变量pool被覆盖,但是之前创建的线程依然存在,所以线程炸了。

pool = threadpool.ThreadPool(10)

把上面的代码放进class的构造函数中,或者保证它只执行一次,
if not self.pool:
    self.pool = threadpool.ThreadPool(10)

运行一段时间后在查看python的线程数,一直保持在10几。

所以python中线程的正确用法是,按需创建线程,重复使用有限的线程

发表评论

[/0o0] [..^v^..] [0_0] [T.T] [=3-❤] [❤.❤] [^v^] [-.0] [!- -] [=x=] [→_→] [><] 更多 »
昵称

抢沙发~