Python Threads对象附加到列表

时间:2015-11-02 04:26:58

标签: python multithreading

我在python中学习多线程。我经常看到当程序使用多线程时,它会将线程对象附加到一个列表中,如下所示:

# imports
import threading
import time

def worker():
    print "worker...."
    time.sleep(30)

threads = []
for i in range(5):
    thread = threading.Thread(target=worker)
    threads.append(thread)
    thread.start()

我认为将线程对象附加到列表是一种很好的做法,但我不知道为什么要这样做?

1 个答案:

答案 0 :(得分:4)

这是常见做法。举个例子:

# imports
import threading
import time

def worker():
    print "worker...."
    time.sleep(30)

threads = []
for i in range(5):
    thread = threading.Thread(target=worker)
    threads.append(thread)
    thread.start()

有人可能希望等待每个线程完成其工作:

for thread in threads:  # iterates over the threads
    thread.join()       # waits until the thread has finished work

不存储某些数据结构中的线程,您必须这样做(创建,启动,加入......)手动

thread_1 = threading.Thread(target=worker)
(...)
thread_n = threading.Thread(target=worker)

thread_1.start()
(...)
thread_n.start()

thread_1.join()
(...)
thread_n.join()

正如你所看到的那样(并且可以想象):你使用线程的次数越多,文书工作越多"如果你手动处理每个线程将被创建。这快速得到了太多的麻烦。此外,您的代码会更混乱,维护性更差。