1.多线程:10000个任务,3个线程耗时:9.669秒
"""
多线程与多进程的速度对比:
比较10000个任务,分别使用3个线程与3个进程来完成,比较哪种方式更快。
"""
import requests
"1.多线程"
import threading, time, os, queue
# 线程的队列(只能在一个进程中使用,解决多线程之间的通信问题)
q1 = queue.Queue()
for i in range(10000):
q1.put("http://127.0.0.1:5000")
def work():
while q1.qsize() > 0:
url = q1.get()
requests.get(url=url)
def main():
st = time.time()
t1 = threading.Thread(target=work)
t2 = threading.Thread(target=work)
t3 = threading.Thread(target=work)
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
et = time.time()
print("10000个任务,多线程耗时{}".format(et - st))
if __name__ == '__main__':
main()
输出:
# 10000个任务,多线程耗时9.669008731842041
2.多进程:10000个任务,3个进程耗时:7.311秒
"""
多线程与多进程的速度对比:
比较1000个任务,分别使用3个线程与3个进程来完成,比较哪种方式更快。
"""
"3.进程池"
import requests, time, os
from multiprocessing import Pool, Manager
# 进程池中的队列(可以给进程池中的各个进程之间使用)
i = 0
def work(q3):
while q3.qsize() > 0:
url = q3.get()
requests.get(url=url)
global i
i += 1
print(" {}进程运行了:{}次".format(os.getpid(), i))
def main():
q3 = Manager().Queue()
for i in range(10000):
q3.put("http://127.0.0.1:5000")
st = time.time()
pool = Pool(3) # 进程池中创建3个进程。
for i in range(3):
# 创建3个进程执行任务(10000个任务)。
pool.apply_async(func=work, args=(q3,))
# 关闭进程池
pool.close()
# 主进程等待进程池中所有子进程执行完毕
pool.join()
et = time.time()
print("10000个任务,多进程耗时{}".format(et - st)) # 10000个任务,多进程耗时11.982725858688354
if __name__ == '__main__':
main()
输出:
30403进程运行了:3334次
30402进程运行了:3325次
30401进程运行了:3341次
10000个任务,多进程耗时7.311042070388794