小编Tay*_*wee的帖子

是否需要连接python中的线程以避免泄漏?

我了解加入线程的目的,我在询问资源使用情况。我在这里的特定用例是,我有一个长时间运行的进程,需要生成许多线程,并且在操作过程中,检查它们是否已终止,然后进行清理。主线程等待inotify事件并根据这些事件生成线程,因此它不能在join()调用上阻塞,因为它需要在inotify调用上阻塞。

我知道,例如,使用pthreads时,不加入终止的线程将导致资源泄漏:

PTHREAD_JOIN(3):如果无法与可连接的线程(即未分离的线程)连接,则会生成“僵尸线程”。避免这样做,因为每个僵尸线程都会消耗一些系统资源,并且当累积了足够多的僵尸线程时,将不再可能创建新的线程(或进程)。

但是,Python的文档没有说明这一点,但是它也没有指定,如果期望许多线程在正常操作期间不连接就自行结束,那么可以毫无疑问地忽略join()。

我想知道,我可以简单地获取线程列表并执行以下操作:

threads = [thread for thread in threads if thread.is_alive()]
Run Code Online (Sandbox Code Playgroud)

对于每次检查,还是会泄漏?还是我必须执行以下操作?

alive_threads = list()
for thread in threads:
    if thread.is_alive():
        alive_threads.append(thread)
    else:
        thread.join()
threads = alive_threads
Run Code Online (Sandbox Code Playgroud)

python multithreading python-multithreading

6
推荐指数
1
解决办法
893
查看次数