• 线程之间的共享全局变量


    为什么线程之间共享全局变量?

      解答:因为多线程是在同一个进程中所以可以共享全局变量。

      

    示例1:不加join方法的效果:

    根据CPU的调度的不同读取和写入两个任务会分别对全局变量进行操作导致期望的结果不能满足。

    from threading import *
    from time import *
    
    
    g_list = []
    
    
    def add_data():
        for i in range(3):
            # 修改全局变量的值,因为列表是可变类型,在原有内存地址上新增数据,所以不需要声明global
            g_list.append(i)
            print("add:", i)
            sleep(0.2)
    
    
    def read_data():
        print("读取数据完成:",g_list)
    
    
    if __name__ == '__main__':
    
        t1 = Thread(target=add_data)
        t2 = Thread(target=read_data)
    
        t1.start()
        t2.start()
    View Code

    执行结果:

    示例2:使用join方法的效果:

    在读取任务之前加上join方法,表示读取数据任务会等待写入数据任务执行完成后再去读取。

    from threading import *
    from time import *
    
    g_list = []
    
    
    def add_data():
        for i in range(3):
            g_list.append(i)
            print("add:", i)
            sleep(0.2)
    
    def read_data():
        print("读取数据完成:", g_list)
    
    
    if __name__ == '__main__':
        t1 = Thread(target=add_data)
        t2 = Thread(target=read_data)
    
        t1.start()
        t1.join()  # t1子线程会等待t2子线程完成数据写入后再去读取
        t2.start()
    View Code

    执行结果:

  • 相关阅读:
    DateTimeHelper
    Check F5 refresh submit post back repeatly
    GZip Compress SoapExtension
    WebBrowser 高级扩展 js扩展 js订阅C#事件
    DataSet GZip/Deflate Serializer
    Socket/Stream Data Helper
    历年评书出版一览表(1955~1994)
    c#检测字节流编码
    Execute SQL Server Store Procedure C# ADO.Net Wrapper Code Generator
    Directory File Disk Searcher
  • 原文地址:https://www.cnblogs.com/yujiemeigui/p/14304908.html
Copyright © 2020-2023  润新知