我希望实现线程模块(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的任务。我不明白为什么如果没有满足条件,该方法将返回。
我是否错误地实施了线程模块?这两个线程试图访问同一队列是一个问题吗? 谢谢
答案 0 :(得分:1)
你需要等待线程完成,因为你的主要继续执行,而2个线程仍在运行。
添加此项以修复它。
thread1.start()
thread2.start()
thread1.join()
thread2.join()
tend = time.clock() - t1