在使用新出的concurrent模块时遇到了一些问题,比如:

import concurrent.futures

max_workers = 30
with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as e:
    for i in range(max_workers):
        e.submit(dl_b, opener)

我在运行时多线程就会自动停止,而且不报出任何错误。

使用threading调试发现是因为线程出错,导致线程被终止,当所有线程都被终止时,整个多线程框架即停止。

所以使用concurrent模块出现意外退出需要考虑是线程执行代码出错之类的问题,concurrent模块不会显示出出错信息,所以很难发觉。

concurrent模块用着确实不错,尤其是使用with后代码清爽了许多,但如果代码有较多不可靠因素,使用传统的threading模块会比较好。