case1
python2多进程代码如下,
import os
import sys
import time
import multiprocessing
def worker(input):
x, y = input
return x * y
def main_v1():
pool = multiprocessing.Pool(processes=2)
inputs = [(1,2),(2,3),(3,4),(4,5),(5,6)]
results = pool.map(worker, inputs)
pool.close()
pool.join()
print("results: {}".format(results))
return
if __name__ == "__main__":
start_t = time.time()
main_v1()
end_t = time.time()
print("used time: {} minutes!".format((end_t - start_t) / 60.0))
运行程序,输出如下内容,
results: [2, 6, 12, 20, 30]
used time: 0.00185183286667 minutes!
case2
对于如下代码,
import os
import time
import sys
def process_one(x: int, y: int) -> None:
"""
你要执行的一步操作,这里只是给出一个示例
"""
res = x + y
return
if __name__ == "__main__":
start_t = time.time()
a = [x for x in range(1000)]
b = [x for x in range(1000,2000)]
for i in range(len(a)):
x = a[i]
y = b[i]
process_one(x, y)
end_t = time.time()
print(f"used time: {(end_t - start_t) / 60.0} minutes!")
将它改造成多线程版本如下,
import os
import time
import sys
from multiprocessing import Pool
def process_one(x: int, y: int) -> None:
"""
你要执行的一步操作,这里只是给出一个示例
"""
res = x + y
return
def process_folder(input):
x, y = input
process_one(x, y)
return
if __name__ == "__main__":
start_t = time.time()
a = [x for x in range(1000)]
b = [x for x in range(1000,2000)]
argvs = [] #整理process_one()函数的输入参数
for i in range(len(a)):
x = a[i]
y = b[i]
argvs.append((x,y))
with Pool(processes=10) as pool:
pool.map(process_folder, argvs)
end_t = time.time()
print(f"used time: {(end_t - start_t) / 60.0} minutes!")