网络编程-线程-4、多个线程之间共享全局变量

知识点:什么叫共享全局变量?

              举个应用场景:假如我有俩个方法,一个执行下载图片的,一个执行将下载的图片整理后发送给别人,按照之前单任务的方法就是等下载完后,再去执行发送图片,多任务就是下载和发送一起运行,此时他们共享同一个图片数据,这个数据就是

                                       共享变量

1、下面用一个简单的代码演示一下共享全局变量:

 

# 定义一个全局变量,创建俩个线程,通过线程1区改变这个全局变量的值,你会发现线程2中的打印出来的全局变量值是线程1修改过后的值
num = 100
def test1():
    global num  # 因为num是不可变类型的,所以要修改全局变量的值必须加个global关键字才能修改它的值
    num += 1
    print('test1:%d'%num)
def test2():
    print('test2:%d'%num)
def main():
    t1 = threading.Thread(target=test1)
    t2 = threading.Thread(target=test2)
    t1.start()
    t2.start()
    print('num的值为:%d'%num)


if __name__ == '__main__':
    main()

 

运行结果如下:

test1:101
test2:101
num的值为:101

 2、补充知识点:

当我们创建线程的时候,如:t1 = threading.Thread(target=test1),我想往线程函数里传递参数怎么办呢?只需t1 = threading.Thread(target=test1,args=(需要传递的参数,)),args必须是一个元祖,以逗号隔开,看下面的例子:

 

import threading



def test1(temp):
    temp.append(33)  # 修改传递过来的列表
    print('test1-num:%s' % str(temp))


def test2(temp):
    print('test2-num:%s' % str(temp))


num = [11, 22]
def main():
    t1 = threading.Thread(target=test1, args=(num,))  # 将num传递给线程函数test1,这里args是一个元祖,逗号一定要写
    t2 = threading.Thread(target=test2, args=(num,))  # 将num传递给线程函数test2
    t1.start()
    t2.start()
    print(num)
运行结果如下:
test1-num:[11, 22, 33]
test2-num:[11, 22, 33]
[11, 22, 33]


 

posted @ 2018-07-23 13:39  上海小盖伦  阅读(926)  评论(0编辑  收藏  举报