zoukankan      html  css  js  c++  java
  • 8.线程做进度条的,列表当做参数传递,线程关于全局变量的优缺点

    #列表当做实参传递到线程中
    import threading,time,random,copy
    def work1(download_list,finish_list):
        #每次从当前下载列表当中去取第一个元素进行下载
        while True:
            file = download_list[0]
            print("--in work1--download:%d"%file)
            time.sleep(1)
            #自定默认删除最后一个
            # download_list.pop()
            #现在完成之后
            #1.任务列表中的移除已经下载的元素
            download_list.remove(file)
            #2.将已经完成的任务加到完成列表当中去
            finish_list.append(file)
    
            print(download_list,finish_list)
            if download_list == []:
                break
    
    # def work2():
    #     print("--in work2--")
    
    if __name__ == "__main__":
        #下载任务列表
        downlist_list = [11,22,33]
    
        #完成任务列表
        finish_list = []
    
        t1 = threading.Thread(target=work1,args=(downlist_list,finish_list,))
        t1.start()
    
        # t2 = threading.Thread(target=work2,)
        # t2.start()
    
        #获取下载进度
        while True:
            pro = len(finish_list)/(len(downlist_list)+len(finish_list))
            print("当前下载进度:%.2f%%"%(pro*100))
            time.sleep(0.5)
            if pro == 1.00:
                break
    
    #总结
    #在一个进程内的所有线程共享全局变量,能够在不适用其他方式的前提下完成多线程之间的数据共享
    #缺点:线程对全局变量的随意更改可能造成多线程之间的对全局变量引用比较混乱(线程安全就成了问题)
  • 相关阅读:
    Angular2与Angular1的区别
    JS的浅拷贝与深拷贝
    浅谈js的事件冒泡和事件捕获
    JS中的call、apply、bind方法
    WEB前端性能优化常见方法
    开放定址法——线性探测(Linear Probing)
    分离链接法(Separate Chaining)
    概观散列函数
    散列——动机引入
    AVL重平衡细节——插入
  • 原文地址:https://www.cnblogs.com/zhangboblogs/p/8627515.html
Copyright © 2011-2022 走看看