码迷,mamicode.com
首页 > 编程语言 > 详细

python多进程多线程的区别

时间:2019-01-23 00:14:40      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:阻塞   内核   bsp   指定   进程与线程   font   art   假设   nbsp   

进程与线程

进程

进程模块,multiprocessing  的 Process

进程的创建 变量 =  Process(target = 指定函数,args = (1,))指定函数参数

这样我们就创建了一个进程,target 无需加括号!

我们通过 变量.start() 调用某进程, 然后使用:变量.join()阻塞母进程,

让母进程等待子进程执行完毕.否则就母进程先执行了,

那样就达不到我们想要的结果了.

有的时候有可能串行比并行要快,并行来回切换有可能用的时间更长!

假设中间有停顿的话,比如time.sleep(2) 那么并行一定比串行快.

并行两个sleep同时运行,所以要快,串行则需要执行两遍sleep,时间长的多.

a = Process(target = 函数,args = 函数参数) 函数无需加括号

a.start() 启动进程  a.join() 阻塞母进程,让子进程先执行.

进程池

from multiprocessing import Pool,cpu_count
import os,time
def long_time_task(i):
print(‘我是子进程:{},进程ID:{}‘.format(i,os.getpid()))
time.sleep(2) #当某进程执行到这时,因为需要等待时间,所以系统自动跳到下个进程
#把需要等待时间的进程前部,逐一执行!,后面又重新逐一调用等待时间后的进程
  #也就是阻塞住了,所以利用阻塞的时间启动下个进程,当第1个进程执行完阻塞前和阻塞后的任务是,
  #才能进入新的进程!

print(i,‘结果:{}‘.format(8**20))

if __name__ == ‘__main__‘:
start = time.time()
print(‘cpu内核数:{}‘.format(cpu_count()))
print(‘当前母进程:{}‘.format(os.getpid()))
p = Pool(4) #创建进程池
for i in range(5): #
p.apply_async(long_time_task,args=(i,))
print(‘等待子进程执行!‘)
p.close() #关闭进程池,并启动4个进程,第5个进程则需要等第1个的进程完毕才能进入
p.join() #阻塞进程池的进程
print(‘总用时:{}‘.format(time.time() - start)) #得出总时长


 

python多进程多线程的区别

标签:阻塞   内核   bsp   指定   进程与线程   font   art   假设   nbsp   

原文地址:https://www.cnblogs.com/lc1013/p/10306482.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!