300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 学习笔记(24):Python网络编程并发编程-进程与线程的区别

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

时间:2019-01-08 02:05:05

相关推荐

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

立即学习:/course/play/24458/296438?utm_source=blogtoedu

线程与进程的区别:

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

1)进程运行结果

#进程运行from multiprocessing import Processdef task(name):print("我是%s"%name)if __name__ == '__main__':p1 = Process(target=task,args=('子进程',))p1.start()print('主进程')

进程运行结果:

2)线程运行结果

from threading import Threaddef task(name):print("我是%s"%name)if __name__ == '__main__':p1 = Thread(target=task,args=('子线程',))p1.start()print('主线程')

线程运行结果:

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

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

1)线程之间

from threading import Threadn = 100def task(name):#声明全局变量,并且修改了n的值global nn = 0print("我是%s"%name)if __name__ == '__main__':#开启了一个新的线程,会改变n的值t1 = Thread(target=task,args=('子线程',))t1.start()print('主线程','n=%s'%n)#由于主线程和子线程之间是共享地址空间的即数据,所以线程n的改变也会共享到主线程中#在主进程下运行了一个主线程和一个子线程(新建的线程)

线程运行结果:

2)进程运行

from multiprocessing import Processn = 100def task(name):global nn = 0print("我是%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_processn = 100def task(name):global nn = 0print("我是%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 Threadimport osn = 100def task(name):global nn = 0print("我是%s"%name,os.getpid())if __name__ == '__main__':#开启了一个新的线程t1 = Thread(target=task,args=('子线程',))t1.start()print('主线程','n=%s'%n,os.getpid())#在主进程下运行了一个主线程和一个子线程(新建的线程)

不同线程pid一样

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。