python线程--threading模块
渊源 为了摆脱6点后加班 "等版本挂测升降级" 的宿命,python小白硬是写起了脚本。以下是用到的部分,惊喜。 --bs4.BeautifulSoup (为了监测固件是否编译完成) --urllib.request.urlopen (为了自动下载固件) --hashlib (为了校验下载下来的固件是否正确) --serial (为了自动烧写固件) --selenium.webdriver (为了自动页面升降级循环/自动重启循环) --threading (为了操作浏览器的同时记录串口日志) --类 (为了代码简洁而进行了封装)。 ? 线程概念 一个进程可有多个线程,这些线程共享该进程所拥有的全部资源。 ? python3线程模块 python3线程模块有两个threading和_thread,threading对_thread进行了封装。我们只需要使用threading这个模块就好。 ? threading模块 模块方法
? Thread类 创建线程对象 import threading
? 线程方法
? 创建线程类 直接创建threading.Thread的子类,来创建一个线程对象实现多线程。 通过继承Thread类,并重写Thread类的run()方法,在run()方法中定义具体要执行的任务。 在Thread类中,提供了一个start()方法用于启动新进程,线程启动后会自动调用run()方法。 import threading,time class MyThread(threading.Thread): def __init__(self,threadName,num): threading.Thread.__init__(self) self.name = threadName self.num = num def run(self): for i in range(self.num): print("{0} i={1}".format(threading.current_thread().getName(),i)) time.sleep(0.1) if __name__ == ‘__main__‘: t1 = MyThread("thread1",3) t1.start() ? 守护线程 子线程用到join()函数,主线程需要依赖子线程执行完毕后才能继续执行代码; 子线程不用join()函数,主线程和子线程是并行运行的,没有依赖关系,主线程执行完了,子线程可能还在执行; 子线程设定为了守护线程,守护线程会等待主线程运行完毕后被销毁。一个主线程可以设置多个守护线程。 设置线程对象为守护线程,一定要在线程对象调用start()函数前设置。 ? Lock类 线程锁 多线程同时修改全局变量时会出现脏数据的线程安全问题。 解决方法:多线程访问时,采用加"互斥"锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。 # 创建锁对象 mutex = threading.Lock() # 获取锁,锁定 mutex.acquire() # 释放锁 mutex.release() ? 线程同步 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |