【python】关于进程和线程的一些基础概念知识

关于进程和线程的一些基础概念知识

线程:

在线程中的内存是共享的

def yz(arg,i):
    arg.append(i)
    print("arg的变化",arg)
arg=list()#在线程内存是共享的,所以arg在每个线程里都是共享的
for i in range(10):
    t=threading.Thread(target=yz,args=(arg,i))
    t.start()

运行的结果:
arg的变化 [0]
arg的变化 [0, 1]
arg的变化 [0, 1, 2]
arg的变化 [0, 1, 2, 3]
arg的变化 [0, 1, 2, 3, 4]
arg的变化 [0, 1, 2, 3, 4, 5]
arg的变化 [0, 1, 2, 3, 4, 5, 6]
arg的变化 [0, 1, 2, 3, 4, 5, 6, 7]
arg的变化 [0, 1, 2, 3, 4, 5, 6, 7, 8]
arg的变化 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

进程:

进程的数据是不共享的,每个子进程的内存都是独立的,如果需要实现进程间的数据共享,则需要使用multiprocessing中的Value()或Array()或Manager

 

证明进程不共享的代码例子
from  multiprocessing import Process,Manager
def yz(a,i):
    a.append(i)
    print("这时的a",a)
if __name__=="__main__":
    a=list()
    for i in range(10):
        t=Process(target=yz,args=(a,i))
        t.start()
        t.join()

运行的结果为:
这时的a [0]
这时的a [1]
这时的a [2]
这时的a [3]
这时的a [4]
这时的a [5]
这时的a [6]
这时的a [7]
这时的a [8]
这时的a [9]

 

在这里说明一下join()的作用

join()是让调用了join方法的进程执行完毕后才能执行后续的代码,否则一直阻塞住

 

posted @ 2017-07-10 16:23  丰study  阅读(90)  评论(0)    收藏  举报