找回密码
 注册
关于网站域名变更的通知
查看: 260|回复: 1
打印 上一主题 下一主题

给深度学习入门者的Python快速教程基础篇之多进程(multiprocessing)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-11-14 10:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-23 09:40 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表