pool.map , .
pool.apply_async . , callback
. log_result foo. , foo.
from __future__ import division
import multiprocessing as mp
import time
def foo(x):
time.sleep(0.1)
return x
def log_result(retval):
results.append(retval)
if len(results) % (len(data)//10) == 0:
print('{:.0%} done'.format(len(results)/len(data)))
if __name__ == '__main__':
pool = mp.Pool()
results = []
data = range(200)
for item in data:
pool.apply_async(foo, args=[item], callback=log_result)
pool.close()
pool.join()
print(results)
10% done
20% done
30% done
40% done
50% done
60% done
70% done
80% done
90% done
100% done
[0, 1, 2, 3, ..., 197, 198, 199]
log_result results
data.
log_result, , pool.apply_async,
, foo.
, , , ,
log_result :
from __future__ import division
import multiprocessing as mp
import time
def foo(x):
time.sleep(0.1)
return x
def make_log_result(results, len_data):
def log_result(retval):
results.append(retval)
if len(results) % (len_data//10) == 0:
print('{:.0%} done'.format(len(results)/len_data))
return log_result
if __name__ == '__main__':
pool = mp.Pool()
results = []
data = range(200)
for item in data:
pool.apply_async(foo, args=[item], callback=make_log_result(results, len(data)))
pool.close()
pool.join()
print(results)
source
share