python多线程和多进程的区别_Python多进程和多线程

python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。Python提供了multiprocessing

多进程(单一参数):

from multiprocessing import Process


def run_test(name,**kwargs):
 print('hhh')


if __name__=="__main__":
 #args传递元祖,kwargs传递字典
 #元祖的逗号是不能省略的
 #创建子进程
 p=Process(target=run_test,args=('test',),kwargs={'key':12})
 
 #调用子线程
 p.start()

多线程(多参数):

from multiprocessing import Process


def run_test(name,age,**kwargs):
    print('hhh')
    print('字典kwargs:',kwargs)


if __name__=="__main__":
    #args传递元祖,kwargs传递字典
    #元祖的逗号是不能省略的
    #创建子进程
    p=Process(target=run_test,args=('test',23),kwargs={'key':12})
 
    #调用子线程
    p.start()

添加JOIN方法来让主进程等待子进程执行完:

from multiprocessing import Process

def run_test(name,**kwargs):
    print('hhh')

if __name__=="__main__":
    #args传递元祖,kwargs传递字典
    #元祖的逗号是不能省略的
    #创建子进程
    p=Process(target=run_test,args=('test',),kwargs={'key':12})
 
    #调用子线程
    p.start()
    p.join()

from multiprocessing import Process


def run_test(name,**kwargs):
    print('hhh')


if __name__=="__main__":
    #args传递元祖,kwargs传递字典
    #元祖的逗号是不能省略的
    #创建子进程
    p=Process(target=run_test,args=('test',),kwargs={'key':12})
 
    #调用子线程
    p.start()
    p.join()
    print('主线程执行完毕')
 

join所完成的工作就是线程同步,即主线程任务结束之后,进入阻塞状态,一直等待其他的子线程执行结束之后,主线程再终止

join内添加参数,没有设置守护进程时,简单的来说,就是给每个子线程一个timeout的时间,让他去执行,时间一到,不管任务有没有完成,直接杀死。

 from multiprocessing import Process
import time


def run_test(name, **kwargs):
 print('子进程进行')
    time.sleep(3)
 print("子进程进行完毕")


if __name__ == "__main__":
 # args传递元祖,kwargs传递字典
 # 元祖的逗号是不能省略的
 # 创建子进程
 p = Process(target=run_test, args=('test',), kwargs={'key': 12})
 print('主进程执开始执行')
 # 调用子线程
 p.start()
    p.join(4)
 print('主进程执行完')

未加join之前:

v2-dcb925476cb86726698504f4ef5a6714_b.jpg

加了join之后:

v2-956fcc06371ea2a229890a4e71e35dbc_b.jpg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值