|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 House 于 2018-11-14 14:32 编辑
; x" C. b! e3 j( S; |7 _% g$ U" h6 e7 d" ]( ]( M" e7 d) Y- q8 a
多进程(multiprocessing): k, K& ^# H. o6 R: L& Q
深度学习中对数据高效处理常常会需要并行,这时多进程就派上了用场。考虑这样一个场景,在数据准备阶段,有很多文件需要运行一定的预处理,正好有台多核服务器,我们希望把这些文件分成32份,并行处理:
! D$ Y6 D) j$ z% h
* G9 ~5 V& n4 K; h4 Z" g: xfrom multiprocessing import Process#, freeze_support
! u$ f- \- e7 n' d/ @
: U( _3 p5 o# A) \4 s: c5 Hdef process_data(filelist):
1 T v( {; Q1 C. ~# ]for filepath in filelist:3 j; \4 M' K- c) c! u! @$ f
print('Processing {} ...'.format(filepath))
5 h- @9 m" {6 L# N% }* @9 f- t# 处理数据" z- t3 c/ Q% h% |# ^- |
...
# ^8 i. [* J6 o9 F. e
( `1 G8 a1 Z, r- _& S) yif __name__ == '__main__':
) [! g1 I* r8 T# 如果是在Windows下,还需要加上freeze_support()$ E& b+ L. w7 U2 [
#freeze_support()
8 y' T G [: L8 O1 }7 j, _' K, B6 {' h7 C; |7 I5 J$ R4 i8 @# N
# full_list包含了要处理的全部文件列表
. y# a% _. x N- O...1 A1 s0 l9 z9 s
5 Y, `# r+ P0 Q4 _ e. m$ M8 Nn_total = len(full_list) # 一个远大于32的数
; L. p# V8 M& S* \0 J. a2 q, yn_processes = 32
" a! g1 [1 ~! B1 i" y- ^' S5 |$ B
1 L4 O9 l0 L* N& p" S, [" u# 每段子列表的平均长度
$ p2 m6 K3 q* X0 X- L7 dlength = float(n_total) / float(n_processes), x9 U( A# ~: j( E. l$ Z) \0 _$ ~' E
8 g- i3 H$ n: {8 B/ E5 w& J2 O1 J# 计算下标,尽可能均匀地划分输入文件列表, U( N, `! I7 F9 i
indices = [int(round(i*length)) for i in range(n_processes+1)]
) \% e8 U( |5 b- J9 ~' \% E+ {5 T* ^2 s; v0 e4 t' W2 P) A
# 生成每个进程要处理的子文件列表
# ~( Q$ E# W/ n" ^( {: `% q3 Psublists = [full_list[indices:indices[i+1]] for i in range(n_processes)]5 D1 X' p8 P7 k) a; r1 U
& D+ F7 X1 z" a' i5 H+ _# 生成进程
' Z5 g5 D+ N9 W3 \6 z6 ]processes = [Process(target=process_data, args=(x,)) for x in sublists]
1 G! v) k ]9 s, a- f1 E
& X( [( `4 Z9 t( m# 并行处理
8 h) Q W& w& m, T4 kfor p in processes:
; T, Z% D/ S1 ?6 e& \- K! Vp.start()
- b" \: T1 h3 r
6 z( U* v9 L+ V! L. R, z+ p5 b! Sfor p in processes:
0 F$ p$ R" K2 P) d$ b& j& h4 h3 Pp.join() |
$ X" s3 e1 y4 y* s5 Z$ d4 x5 U! p+ b, g5 v
1 Q0 Z! `$ F- @% D6 o0 v
1 ~9 C% D1 H0 q4 m! q0 |6 r
& W4 }% S( a5 S: U$ t. g& S: W& G( T! H/ `4 S
|
, ]$ g8 s$ F! `- f |
/ G. l- k2 E" j |
|