0
点赞
收藏
分享

微信扫一扫

多线程与多进程效率对比

伽马星系 2022-02-07 阅读 88

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
举报

相关推荐

0 条评论