大量相同的计算任务推荐用concurrent.futures库
不同任务推荐用multiprocessing 库
import time
import concurrent.futures as cf
from multiprocessing import Process
def printf(i):
print(i)
def f0(name):
print(f"开始进程{name}")
with cf.ProcessPoolExecutor() as executor:
executor_results = executor.map(printf, list(range(10)))
print(f"结束进程{name}")
time.sleep(1)
def f1(name):
# print(name)
print(f"开始进程{name}")
for i in range(10):
print(i)
print(f"结束进程{name}")
time.sleep(1)
def f2(name):
# print(name)
print(f"开始进程{name}")
for i in range(ord('a'), ord('z')+1):
print(chr(i))
print(f"结束进程{name}")
time.sleep(1)
def test_multi_process(name):
t1 = time.time()
print(f"开始进程{name}")
p1 = Process(target=f0, args=("child process1: f0",))
p2 = Process(target=f2, args=("child process2: f2",))
p1.start()
p2.start()
p1.join()
p2.join()
t2 = time.time()
print(f"结束进程{name} : {t2-t1}")
def test_single_process(name):
t1 = time.time()
print(f"开始进程{name}")
f1("main: f1")
f2("main: f2")
t2 = time.time()
print(f"结束进程{name} : {t2-t1}")
if __name__ == '__main__':
p1 = Process(target=test_single_process, args=("single_process",))
p2 = Process(target=test_multi_process, args=("multi_process",))
p1.start()
p2.start()
p1.join()
p2.join()