测试线程模块时出错

时间:2015-06-19 17:37:08

标签: python multithreading

我希望实现线程模块(python3),并希望先测试它,看看它如何帮助减少运行时间。以下代码不实现多线程:

smalldatetime

这会产生:

import threading, time
import queue
q = queue.Queue(10000000)

def fill_list():
    global q
    while True:
        q.put(1)
        if q.qsize() == 10000000:
            return

t1 = time.clock()
fill_list()
tend = time.clock() - t1

print(tend)

然后我尝试用2个线程完成相同的任务,以减少运行时间。

>>>
29.939367999999998
>>>

这会产生:

import threading, time
import queue

q = queue.Queue(10000000)

def fill_list():
    global q 
    while True:
        q.put(1)
        if q.qsize() == 10000000:
            return

t1 = time.clock()
thread1 = threading.Thread(target=fill_list, args=())
thread2 = threading.Thread(target=fill_list, args=())
thread1.start()
thread2.start()
tend = time.clock() - t1
print(q.qsize())
print(tend)

所以它完成得更快,但它实际上并没有完成将队列填充到10000000的任务。我不明白为什么如果没有满足条件,该方法将返回。

我是否错误地实施了线程模块?这两个线程试图访问同一队列是一个问题吗? 谢谢

1 个答案:

答案 0 :(得分:1)

你需要等待线程完成,因为你的主要继续执行,而2个线程仍在运行。

添加此项以修复它。

thread1.start()
thread2.start()
thread1.join()
thread2.join()
tend = time.clock() - t1