7.1线程
常用参数鋭明
target 表示凋用対象,即子袋程要抗行的任努name ? 子銭程的名称
args 侍入target函数中的位置参数,是一个元組,参数后必須加逗号
常用实例方法:
-
1.Thread.run (self)
线程启动时运行的方法,由该方法调用target参数所指定的函数。
-
2.Thread,start (self)
启动进程,start方法就是 去帮你调用run方法。
-
3.Thread,terminate (self)
强制终止线程
-
4.Thread.join (self,timeout=None)
阻塞调用,主线程进行等待。
-
5.Thread. setDaeman (self,daemonic)
将子线程设置为守护线程。
-
6.Thread . getName (self,name)
获取线程名称Thread,setName (self,name) 设置线程名称
?
7.2 线程流程
-
1.主线程 :
当一个程序启动时,就有一个线程开始运行,该线程通常叫做程序的主线程
-
2.子线程 :
因为程序是开始时就执行的,如果你需要再创建线程,那么创建的线程就是这个主线程的子线程
-
3.主线程的重要性体现在两方面 :
-
是产生其他子线程的线程
-
通常它必须最后完成执行比如执行各种关闭操作
-
join :
阻塞调用程序,直到调用join () 方法的线程执行结束,才会继续往下执行
###### for i in range(10): 创建线程 开始线程 for i in range(10): 阻塞线程 ######
?
?
import time
from threading import Thread
def hello (name):
print (‘hello,{}‘.format(name)) ?
锁
?
from threading import Thread,Lock
X=0
n = 1000000
lock = Lock( )
def incr(n):
global x
for i in range(n):
lock. acquire()
X+=1
lock. release()
def decr(n):
global x
for i in range(n):
lock . acquire( )
X-=1
lock. release()
?
i = Thread(target=incr,args=(n,))
d = Thread( target=decr,))
?
i.start( )
d.start( )
i. join()
d.join()
print(x)
?
队列
?
入队: put(item)
出队: get()
测试空: empty() # 近似
测试满: full() # 近似
队列长度: qsize() # 近似
等待完成: join()
任务结束: task_done()
?
from threading import Thread,Lock
from queue import Queue ‘
from random import randint
my_queue = Queue(10)
def incr(my_queue):
for i in range(10):
? ?num. randint(0,1000)
my_queue. put(num)
def decr(my_queue ):
? ?for i in range(5):
? ?num . my_queue.get()
myPqueue.task_done()
print( num)
i = Thread( target=incr,args=(my_queue,))
d = Thread(target-decr,))
i.start( )
d.start( )
i.join( )
d.join()
?
?
?
7.3 线程池
?
?
from multiprocessing.pool import ThreadPool
class ThreadPool(object):
def __init__ ( self,n):
self.q = Queue( )
for i in range(n):
Thread( target=self. worker,daemon= True).start( )
def worker(self):
while True:
func,args,kwargs = self.q.get()
func( *args,**kwargs )
self.q.task_done()
def put(self,target,args=( ),kwargs={} ):
self.q.put((target,kwargs))
def join(self):
self.q. join()
def hello( name):
print(‘hello,lf‘. format( name) )
time .sleep(2)
print( ‘ byebye‘)
tp = ThreadPool(5)
for i in range(10):
tp.put(hello,args=(i,))
tp. join( )
?
?
?