IO密集型任务 子进程解决方案
# test1 IO密集型任务 (法1:开启子进程的解决)
from multiprocessing import Process
import time
def task():
time.sleep(2)
if __name__ == '__main__':
start = time.time()
lst = []
# 用于开启100个子进程
for i in range(100):
p = Process(target=task)
p.start()
# 将p子进程对象存入列表中,此时列表作为一个容器接受所有实例化出来的对象
lst.append(p)
for p in lst:
p.join()
end = time.time()
print(end-start)
# 耗时 2.1534228324890137
IO密集型任务任务 子线程解决方案
from threading import Thread
import time
def task():
time.sleep(2)
if __name__ == '__main__':
start = time.time()
lst = []
# 用于开启100个子进程
for i in range(100):
p = Thread(target=task)
p.start()
# 将p子进程对象存入列表中,此时列表作为一个容器接受所有实例化出来的对象
lst.append(p)
for p in lst:
p.join()
end = time.time()
print(end-start)
# 耗时 2.0103108882904053
计算密集型任务 子进程解决方案
from multiprocessing import Process
import time
def task():
for i in range(100000):
i * i
if __name__ == '__main__':
start = time.time()
lst = []
for i in range(5):
p = Process(target=task)
p.start()
lst.append(p)
for p in lst:
p.join()
end = time.time()
print(end - start)
# 耗时 1.9584298133850098
计算密集型任务 子线程解决方案
from multiprocessing import Process
import time
def task():
for i in range(100000):
print(i * i)
if __name__ == '__main__':
start = time.time()
lst = []
for i in range(5):
p = Process(target=task)
p.start()
lst.append(p)
for p in lst:
p.join()
end = time.time()
print(end - start) # 耗时 1.8708198070526123
总结:
对于io密集型 建议使用多线程
对于计算密集型 建议使用多进程