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)) #传参数传的是 元组 time.sleep(3) print (‘666‘) def hi (): print (‘wuchi‘) time.sleep(3) print (‘888‘) if __name__ == ‘__main__‘: hello_thread = Thread(target = hello,args=()) #函数名 hi_thread = Thread(target = hi) hello_thread.start() hi_thread.start() hello_thread.join() hi_thread.join() ? ? ############## ? ? class MyThread( Thread): def__ init__ (self, people_ name, *args, **kwargs): super( ).__ init__ ( *args, **kwargs) self.people_name = people_name def run( self): print( ‘hello, {}‘.format(self.people_name))time .sleep(3) print( ‘byebye‘ ) my_ thread = MyThread( ‘手段‘ , name= ‘打打是‘ ) print(my_thread. getName( )) my_thread.start( ) . ? ? ? ? ? ?锁
? 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, args=(n,)) ? 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, args=(my_queue,)) 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, args, 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( ) ? ? ? ########################## ? ? def hello(name): print( ‘hello, f]‘. format( name)) time . sleep(2) print( ‘ byebye‘ ) ? tp = ThreadPool(10) for i in range(10): . ? tp. apply_ async(hello, args=(i,)) ? # tp. terminate() tp. close( ) tp. join( )I ? ? 操作一: close - 关闭提交通道,不允许再提交任务 ? 操作二: terminate - 中止进程池,中止所有任务 ? ? ?
查看更多关于Python数据库 7.线程与线程池的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did170452