2022年 11月 8日

python多进程返回结果获取

import datetime,time
def fun1(i):
    print(f"开始时间:{datetime.datetime.now()}")
    time.sleep(1)
    print(f"结束时间:{datetime.datetime.now()}")
    return i+1
L1=[1,5,10,20]
from multiprocessing import  Pool
p=Pool(5)
result=[]
for i in range(10):
    result.append(p.apply_async(fun1,args=(i,)))
p.close()
p.join()
for i in result:
    print(i.get())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

返回结果

开始时间:2022-07-08 12:31:44.400372
开始时间:2022-07-08 12:31:44.400524
开始时间:2022-07-08 12:31:44.400646
开始时间:2022-07-08 12:31:44.400768
开始时间:2022-07-08 12:31:44.400868
结束时间:2022-07-08 12:31:45.402358
开始时间:2022-07-08 12:31:45.402544
结束时间:2022-07-08 12:31:45.413063
开始时间:2022-07-08 12:31:45.413180
结束时间:2022-07-08 12:31:45.413200
开始时间:2022-07-08 12:31:45.413298
结束时间:2022-07-08 12:31:45.413317
开始时间:2022-07-08 12:31:45.413411
结束时间:2022-07-08 12:31:45.413430
开始时间:2022-07-08 12:31:45.413513
结束时间:2022-07-08 12:31:46.403838
结束时间:2022-07-08 12:31:46.414218
结束时间:2022-07-08 12:31:46.414293
结束时间:2022-07-08 12:31:46.414346
结束时间:2022-07-08 12:31:46.414394
1
2
3
4
5
6
7
8
9
10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

另外一种方式

import datetime,time
def fun1(i):
    print(f"开始时间:{datetime.datetime.now()}")
    time.sleep(1)
    print(f"结束时间:{datetime.datetime.now()}")
    return i+1
from concurrent.futures import  ProcessPoolExecutor
result=[]
with ProcessPoolExecutor(max_workers=5) as p:
    for i in range(10):
        result.append(p.submit(fun1,i))
for i in result:
    print(i.result())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

返回结果

import datetime,time
def fun1(i):
    print(f"开始时间:{datetime.datetime.now()}")
    time.sleep(1)
    print(f"结束时间:{datetime.datetime.now()}")
    return i+1
from concurrent.futures import  ProcessPoolExecutor
result=[]
with ProcessPoolExecutor(max_workers=5) as p:
    for i in range(10):
        result.append(p.submit(fun1,i))
for i in result:
    print(i.result())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

第三种方案

import datetime,time
def fun1(i):
    print(f"开始时间:{datetime.datetime.now()}")
    time.sleep(i%2)
    print(f"结束时间:{datetime.datetime.now()}")
    return i+1
from concurrent.futures import  ProcessPoolExecutor
with ProcessPoolExecutor(max_workers=5) as p:
        result=p.map(fun1,range(10))
for i in result:
    print(i)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

运行结果

开始时间:2022-07-08 12:50:56.977642
结束时间:2022-07-08 12:50:56.977713
开始时间:2022-07-08 12:50:56.977810
开始时间:2022-07-08 12:50:56.977913
结束时间:2022-07-08 12:50:56.977960
开始时间:2022-07-08 12:50:56.978048
开始时间:2022-07-08 12:50:56.978150
结束时间:2022-07-08 12:50:56.978204
开始时间:2022-07-08 12:50:56.978313
开始时间:2022-07-08 12:50:56.978876
结束时间:2022-07-08 12:50:56.978930
开始时间:2022-07-08 12:50:56.979019
开始时间:2022-07-08 12:50:56.979099
结束时间:2022-07-08 12:50:56.979144
开始时间:2022-07-08 12:50:56.979244
结束时间:2022-07-08 12:50:57.979318
结束时间:2022-07-08 12:50:57.979482
结束时间:2022-07-08 12:50:57.979560
结束时间:2022-07-08 12:50:57.979626
结束时间:2022-07-08 12:50:57.979694
1
2
3
4
5
6
7
8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28