好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Python数据库 7.线程与线程池

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.线程与线程池的详细内容...

  阅读:26次