学习笔记(24):Python网络编程&并发编程-进程与线程的区别

立即学习:https://edu.csdn.net/course/play/24458/296438?utm_source=blogtoedu

线程与进程的区别:

 

1.消耗区别:进程>线程

1)进程运行结果

#进程运行
from multiprocessing import Process
def task(name):
    print("我是%s"%name)

if __name__ == '__main__':
    p1 = Process(target=task,args=('子进程',))
    p1.start()

    print('主进程')

进程运行结果:

 2)线程运行结果

from threading import Thread
def task(name):
    print("我是%s"%name)

if __name__ == '__main__':
    p1 = Thread(target=task,args=('子线程',))
    p1.start()

    print('主线程')

线程运行结果:

3)分析:在两端代码中,除了模块的不一样,代码的顺序都是一样的,但是运行的结果的顺序是不一样的。进程运行中是主进程先打印再打印的子进程,这是因为新建一个进程需要申请内存空间时间较长,而线程恰恰相反。所以进程消耗大于线程。注:同一进程里面的线程是平级的,没有父线程子线程的说法,为了方便理解才说的

 

2.地址共享问题:进程之间不共享,同一进程线程之间共享

1)线程之间

from threading import Thread
n = 100
def task(name):
#声明全局变量,并且修改了n的值
    global n
    n = 0
    print("我是%s"%name)

if __name__ == '__main__':
    #开启了一个新的线程,会改变n的值
    t1 = Thread(target=task,args=('子线程',))
    t1.start()

    print('主线程','n=%s'%n)#由于主线程和子线程之间是共享地址空间的即数据,所以线程n的改变也会共享到主线程中
#在主进程下运行了一个主线程和一个子线程(新建的线程)

线程运行结果:

 

2)进程运行

from multiprocessing import Process
n = 100
def task(name):
    global n
    n = 0
    print("我是%s"%name)

if __name__ == '__main__':
    #开启了一个新的进程
    p1 = Process(target=task,args=('子进程',))
    p1.start()

    print('主进程','n=%s'%n)
#在新的进程中,n的值已经被改变成了0,在主进程中进行n的值的打印,得到的是全局变量n=100,说明进程之间的数据是不共享的,其值的改变包含影响到其他进程值

进程运行结果:

 

3.pid

查看当前进程pid的方法:

1)multiprocessing.current_process().pid

2)os.getpid()

查看当前进程ppid()的方法:父进程pid

os.getppid()

 

不同进程pid

from multiprocessing import Process,current_process
n = 100
def task(name):
    global n
    n = 0
    print("我是%s"%name,current_process().pid)

if __name__ == '__main__':
    #开启了一个新的线程
    p1 = Process(target=task,args=('子进程',))
    p1.start()

    print('主进程','n=%s'%n,current_process().pid)

子进程的pid与父进程pid不同

 

 不同线程pid

from threading import Thread
import os
n = 100
def task(name):
    global n
    n = 0
    print("我是%s"%name,os.getpid())

if __name__ == '__main__':
    #开启了一个新的线程
    t1 = Thread(target=task,args=('子线程',))
    t1.start()

    print('主线程','n=%s'%n,os.getpid())
#在主进程下运行了一个主线程和一个子线程(新建的线程)

不同线程pid一样

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有情怀的机械男

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值