写了个数据同步的工具跑了一晚上,第二天起来发现一堆异常
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中线程的正确用法是,按需创建线程,重复使用有限的线程
发表评论
抢沙发~