python3如何从列表中删除线程对象

时间:2017-10-09 21:58:18

标签: python multithreading list

我正在编写一个应该无限期运行的脚本,并且每隔几秒就会使用线程将一些内容放入db中。这有效,但我看到进程的内存每隔几秒就会略微增加,我认为这是因为保存所有Thread对象的列表永远不会被清空。我该怎么办? 连接被置于is_alive条件下,因此它不会花费任何时间来产生下一个线程。 以下示例导致

  

AttributeError:'Thread'对象没有属性'kill'

ggplot2

我希望输出为:

  

1 1

     

1 1

1 个答案:

答案 0 :(得分:0)

最后一行(for - 循环和开启)可以简单地编写为:

    threads_alive = []
    for t in threads:
        if t.is_alive() == False:
            t.join()
        else:
            threads_alive.append(t)

    threads = threads_alive

或者如果你必须以某种方式处理已经死亡的线程:

    threads_alive = []
    threads_dead = []
    for t in threads:
        if t.is_alive() == False:
            t.join()
            threads_dead.append(t)
        else:
            threads_alive.append(t)

    threads = threads_alive
    for t in threads_dead:
        ... postprocess dead threads here ...