python的多线程简易使用
import multiprocessing as mp
def show(ctx, proc):
‘’‘多线程执行的主体’‘’
for i in ctx:
print('ctx: %d, proc: %d' %(i, proc))
def mul_show(ctx, proc_num):
‘’‘show 函数多线程执行’‘’
all_proc = [] #存放所有线程
delta = int(len(ctx)/proc_num)
start = 0
end = delta
for i in range(proc_num):
sub_ctx = ctx[start: end] # 将输入数据劈成多分
start = end
end = end+delta
p = mp.Process(target=show, args=(sub_ctx,i)) #初始化线程
all_proc.append(p)
p.start() #启动线程
# 设置线程阻塞,线程阻塞能够保证所有线程都执行完毕后才会进入下一段程序
for p in all_proc:
p.join()
if __name__ == '__main__':
arr = range(20)
proc_num = 5
mul_show(arr, 5)
# 在所有线程都执行完毕后,才会输出【end】
print('end')
上述代码输出的结果:注意 end在最后一行才被输出
ctx: 0, proc: 0
ctx: 1, proc: 0
ctx: 2, proc: 0
ctx: 4, proc: 1
ctx: 3, proc: 0
ctx: 5, proc: 1
ctx: 8, proc: 2
ctx: 6, proc: 1
ctx: 9, proc: 2
ctx: 7, proc: 1
ctx: 10, proc: 2
ctx: 12, proc: 3
ctx: 13, proc: 3
ctx: 11, proc: 2
ctx: 14, proc: 3
ctx: 15, proc: 3
ctx: 16, proc: 4
ctx: 17, proc: 4
ctx: 18, proc: 4
ctx: 19, proc: 4
end
如果我们注释掉线程阻塞的操作:注意,【end】在线程执行完毕之前就已经输入,这意味着在所有线程执行完毕之前,代码会继续往后执行
ctx: 0, proc: 0
ctx: 1, proc: 0
ctx: 4, proc: 1
ctx: 2, proc: 0
ctx: 5, proc: 1
ctx: 3, proc: 0
ctx: 6, proc: 1
end
ctx: 8, proc: 2
ctx: 7, proc: 1
ctx: 9, proc: 2
ctx: 10, proc: 2
ctx: 12, proc: 3
ctx: 11, proc: 2
ctx: 13, proc: 3
ctx: 14, proc: 3
ctx: 16, proc: 4
ctx: 15, proc: 3
ctx: 17, proc: 4
ctx: 18, proc: 4
ctx: 19, proc: 4