python_线程,,Python线程Th
python_线程,,Python线程Th
Python线程
Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。
#coding:utf-8import threadingimport timedef run(num): print("thread...",num) time.sleep(1)for i in range(10): #开通10个线程 t = threading.Thread(target=run,args=(i,)) #创建实例 t.start()
上述代码创建了10个“前台”线程,然后控制器就交给了CPU,CPU根据指定算法进行调度,分片执行指令。
更多方法:
start 线程准备就绪,等待CPU调度setName 为线程设置名称getName 获取线程名称setDaemon 设置为后台线程或前台线程(默认)如果是后台线程,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论成功与否,均停止
如果是前台线程,主线程执行过程中,前台线程也在进行,主线程执行完毕后,等待前台线程也执行完成后,程序停止join 逐个执行每个线程,执行完毕后继续往下执行,该方法使得多线程变得无意义run 线程被cpu调度后自动执行线程对象的run方法
import threadingimport time class MyThread(threading.Thread): def __init__(self,num): threading.Thread.__init__(self) self.num = num def run(self):#定义每个线程要运行的函数 print("running on number:%s" %self.num) time.sleep(3) if __name__ == ‘__main__‘: t1 = MyThread(1) t2 = MyThread(2) t1.start() t2.start()自定义线程类
线程锁(Lock、RLock)
由于线程之间是进行随机调度,并且每个线程可能只执行n条执行之后,当多个线程同时修改同一条数据时可能会出现脏数据,所以,出现了线程锁 - 同一时刻允许一个线程执行操作。
简单例子:
#coding:utf-8import threadingimport timelock = threading.RLock() #创建个锁的实例 def run(num): lock.acquire() #对以下步骤(显示屏幕动作)线程进行锁住(让步骤有个串联执行顺序) print("thread...",num) lock.release() #解锁 time.sleep(1) #lock.release()for i in range(10): #开通10个线程 t = threading.Thread(target=run,args=(i,)) #创建实例 t.start()
例子:
#!/usr/bin/env python# -*- coding:utf-8 -*-import threadingimport timegl_num = 0def show(arg): global gl_num time.sleep(1) gl_num +=1 print gl_numfor i in range(10): t = threading.Thread(target=show, args=(i,)) t.start()print ‘main thread stop‘未使用锁
#!/usr/bin/env python#coding:utf-8 import threadingimport time gl_num = 0 lock = threading.RLock() def Func(): lock.acquire() global gl_num gl_num +=1 time.sleep(1) print gl_num lock.release() for i in range(10): t = threading.Thread(target=Func) t.start()
BoundedSemaphore:
#coding:utf-8import threadingimport time#lock = threading.RLock() #创建个锁的实例def run(num): sp.acquire() #对以下步骤(显示屏幕动作)线程进行锁住(让步骤有个串联执行顺序) print("thread...",num) print ‘‘ #lock.release() #解锁 time.sleep(1) sp.release()if __name__ == ‘__main__‘: sp = threading.BoundedSemaphore(3) #控制每个锁每次可以执行多少个线程 for i in range(12): #开通10个线程 t = threading.Thread(target=run,args=(i,)) #创建实例 t.start()while threading.activeCount() !=1: #当执行完所有动作后线程数默认有一个主线程 passelse: print ‘--------all threads are finish! ----------‘
python_线程
相关内容
- 暂无相关文章
评论关闭