单线程和多线程耗时对比:(请自行对比,深刻理解)
单线程运行:
"""
@author: zhangjun.xue
@time: 2020/3/30 14:20
@file: threading_queue.py.py
@desc: 多线程去消费一个队列的例子
"""
import threading
import time
import queue
# 下面来通过多线程来处理Queue里面的任务:
def work(q):
while True:
if q.empty():
return
else:
t = q.get()
print("当前线程sleep {} 秒".format(t))
time.sleep(t)
def main():
q = queue.Queue()
for i in range(5):
q.put(i) # 往队列里生成消息
# 单线程
work(q)
# 多线程
# thread_num = 5
# threads = []
# for i in range(thread_num):
# t = threading.Thread(target=work, args=(q,))
# # args需要输出的是一个元组,如果只有一个参数,后面加,表示元组,否则会报错
# threads.append(t)
#
# for i in range(thread_num):
# threads[i].start()
# for i in range(thread_num):
# threads[i].join()
if __name__ == "__main__":
start = time.time()
main()
print('耗时:', time.time() - start)
输出:
当前线程sleep 0 秒
当前线程sleep 1 秒
当前线程sleep 2 秒
当前线程sleep 3 秒
当前线程sleep 4 秒
耗时: 10.000863552093506
两个线程去消费长度为5的队列:
"""
@author: zhangjun.xue
@time: 2020/3/30 14:20
@file: threading_queue.py.py
@desc: 多线程去消费一个队列的例子
"""
import threading
import time
import queue
# 下面来通过多线程来处理Queue里面的任务:
def work(q):
while True:
if q.empty():
return
else:
t = q.get()
print("当前线程sleep {} 秒".format(t))
time.sleep(t)
def main():
q = queue.Queue()
for i in range(5):
q.put(i) # 往队列里生成消息
# 单线程
# work(q)
# 多线程
thread_num = 2
threads = []
for i in range(thread_num):
t = threading.Thread(target=work, args=(q,))
# args需要输出的是一个元组,如果只有一个参数,后面加,表示元组,否则会报错
threads.append(t)
for i in range(thread_num):
threads[i].start()
for i in range(thread_num):
threads[i].join()
if __name__ == "__main__":
start = time.time()
main()
print('耗时:', time.time() - start)
输出:
当前线程sleep 0 秒
当前线程sleep 1 秒
当前线程sleep 2 秒
当前线程sleep 3 秒
当前线程sleep 4 秒
耗时: 6.0027899742126465
5个线程去消费一个长度为5的队列:
"""
@author: zhangjun.xue
@time: 2020/3/30 14:20
@file: threading_queue.py.py
@desc: 多线程去消费一个队列的例子
"""
import threading
import time
import queue
# 下面来通过多线程来处理Queue里面的任务:
def work(q):
while True:
if q.empty():
return
else:
t = q.get()
print("当前线程sleep {} 秒".format(t))
time.sleep(t)
def main():
q = queue.Queue()
for i in range(5):
q.put(i) # 往队列里生成消息
# 单线程
# work(q)
# 多线程
thread_num = 5
threads = []
for i in range(thread_num):
t = threading.Thread(target=work, args=(q,))
# args需要输出的是一个元组,如果只有一个参数,后面加,表示元组,否则会报错
threads.append(t)
for i in range(thread_num):
threads[i].start()
for i in range(thread_num):
threads[i].join()
if __name__ == "__main__":
start = time.time()
main()
print('耗时:', time.time() - start)
输出:
当前线程sleep 0 秒
当前线程sleep 1 秒
当前线程sleep 2 秒
当前线程sleep 3 秒
当前线程sleep 4 秒
耗时: 4.0016114711761475