A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© IT-hanpeng 初级黑马   /  2019-6-14 20:06  /  739 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、导入线程模块:import threading
2、创建子线程:hello_thread = threading.Thread(target=hello) 【hello是任务名,指向函数hello()的内存地址,切记不能将任务名写为hello();T 为大写】
3、启动子线程:hello_thread.start()
4、子线程执行带参任务时:(1) args=(参数,)    表示以元组的方式给执行任务传参
                            (2) kwargs={键值对}    表示以字典方式给执行任务传参
5、线程注意点:(1) 进程之间能共享全局变量
           (2) 主线程会等待所有的子线程执行结束再结束
           (3) 线程之间执行是无序的
           (4) 线程之间共享全局变量数据出现错误问题
6、主线程结束时就结束子线程的方法:(1) 守护主线程方法一:hello_thread = threading.Thread(target=hello, daemon=True)
               (2) 守护主线程方法二:hello_thread.setDaemon(True)
7、共享全局变量数据错误的解决办法:(1) 线程1.join() 【等待线程1执行完成后再执行线程2】
               (2) 使用互斥锁:lock = threading.Lock() #创建互斥锁【创建位置在程序开头处】【只针对上锁的线程会有执行的先后顺序,没有lock.acquire()的线程,启动即执行不用等待】
           lock.acquire()  #操作共享数据之前,要上锁【线程执行任务的开始处上锁,先抢到锁的线程先执行】
           lock.release()  #共享数据操作完成以后,需要释放锁【在线程执行任务的结束处释放锁,一定要注意位置,避免未释放锁造成死锁情况】
         #【lock.acquire()相当于对线程进行上锁,同一时刻只有一把钥匙可以让线程执行,所有上锁的线程只有等待抢到钥匙才能执行】

1 个回复

倒序浏览
鹏,你可真厉害呢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马