python多进程

进程的五态模型
1、 queue的作用,工作函数中,无法通过return返回进程函数中的结果,使用queue进行存储结果,要用时再进行取出

import time
import multiprocessing as mp

def job1(q):
    res = 0
    for i in range(100):
        res += i + i**5 + i**8
        time.sleep(0.1)
    q.put(res)

def job2(q):
    res = 0
    for i in range(100):
        res += i + i**5 + i**8
        time.sleep(0.1)
    q.put(res)


if __name__ == '__main__':
    start_time = time.time()
    #创建队列
    q = mp.Queue()
    #创建进程
    new_process1 = mp.Process(target=job1, args=(q,))
    # 创建进程2
    new_process2 = mp.Process(target=job2, args=(q,))
    new_process1.start()
    new_process2.start()
    #通过队列获取值
    res1 = q.get()
    res2 = q.get()
    print("res1 为 %d,res2 为 %d"%(res1,res2))
    end_time = time.time()
    print(" 整个过程所用时间 %s"%(end_time - start_time))

2、多进程、多线程、以及什么都不用的普通方法进行处理,看看他们三种方法的效率

import time
import multiprocessing as mp
import threading as th

def mp_job1(res):
    for i in range(10000000):
        res += i + i**5 + i**8
    print(res)

def mt_job2(res):
    for i in range(10000000):
        res += i + i**5 + i**8
    print(res)

def normal_job(res):
    for i in range(10000000):
        res += i + i**5 + i**8
    print(res)


if __name__ == '__main__':
    start_time = time.time()
    mp_sum = 0
    #创建进程
    new_process1 = mp.Process(target=mp_job1, args=(mp_sum,))
    # 创建进程2
    new_process2 = mp.Process(target=mp_job1, args=(mp_sum,))
    new_process1.start()
    new_process2.start()
    new_process1.join()
    new_process2.join()
    end_time = time.time()
    print(" 整个过程所用时间 %s"%(end_time - start_time))
    start_time1 = time.time()
    mt_sum = 0
    # 创建进程
    new_t1 = th.Thread(target=mt_job2, args=(mt_sum,))
    # 创建进程2
    new_t2 = th.Thread(target=mt_job2, args=(mt_sum,))
    new_t1.start()
    new_t2.start()
    new_t1.join()
    new_t2.join()
    end_time1 = time.time()
    print(" 整个过程所用时间 %s" % (end_time1 - start_time1))
    start_time3 = time.time()
    n_sum = 0
    normal_job(n_sum)
    normal_job(n_sum)
    end_time3 = time.time()
    print(" 整个过程所用时间 %s" % (end_time3 - start_time3))
运行结果
进程状态转换
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容