
进程的五态模型
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))

运行结果

进程状态转换