Python 学习笔记 多线程-threading

    输出示例(不看也罢):

    

    ```

    `test start... MainThread Thread-1 Thread-2  Thread-1 start  Thread-2 Thread-1 Thread-3 0 startThread-3 Thread-4 start Thread-3 0Thread-5    Thread-4Thread-2  Thread-5 0Thread-6 start  start Thread-5 Thread-4 0Thread-7 0   Thread-6 start Thread-6 0  Thread-7Thread-8  start Thread-7 0 Thread-8 startThread-9  Thread-8 0 Thread-9 start  Thread-9 0 Thread-10 Thread-10 start Thread-10 0 Thread-3 Thread-2 1 1 Thread-7 Thread-1 11  Thread-8Thread-6 1  Thread-4 1  1 Thread-5 1Thread-9 1Thread-10 1   Thread-3 Thread-6 2Thread-7 Thread-4 Thread-2  2 2 2 2 Thread-1 2 Thread-8 2 Thread-9 2  Thread-5 2 Thread-10 2 Thread-6 3 Thread-2 3Thread-3Thread-4Thread-7   3 3  Thread-1  33Thread-5   3 Thread-8 3 Thread-10 3Thread-9 3  Thread-6 4  Thread-9 4Thread-5  4 Thread-2 4  Thread-3Thread-1 4Thread-7 4Thread-8  Thread-4 4   4  4Thread-10  4 Thread-1 5  Thread-5 5  Thread-4 5 Thread-7 Thread-3 Thread-105 Thread-8 Thread-2 555    Thread-6 55Thread-9  5  Thread-9 Thread-2 Thread-5 Thread-10 Thread-6Thread-1 6666   6 Thread-7Thread-3 6  Thread-8    6  Thread-4 666   Thread-10 7 Thread-6Thread-9 7Thread-1 7  7  Thread-3 Thread-8Thread-4 77  Thread-5 7  Thread-2 7 Thread-7  7  7 Thread-10 8 Thread-8 8  Thread-9Thread-2  88  Thread-1 8 Thread-5 8  Thread-7 8 Thread-3 8 Thread-4 8  Thread-6 8 Thread-10 9  Thread-5 9Thread-8 9  Thread-3Thread-7 9  Thread-9Thread-2  99   9 Thread-1 9 Thread-4 9  Thread-6 9 Thread-8 Thread-5 doneThread-10 donedone  Thread-7  done Thread-9 done   Thread-2 Thread-3 donedone  Thread-1 done Thread-4 doneThread-6 done  test done... MainThread`

    

    ```

    

    输出示例

    

2.  threading模块中的函数使用示例

    

    ```

    `# the function in the module threading import threading from time import sleep, ctime   # active_count()   return the num of active thread # current_thread() return current thread object # enumerate()      return the list of active threads # settrace(func)   provide a func for all thread   def func():     print threading.current_thread().name, 'start'     print 'in', threading.current_thread().name,threading.enumerate()     sleep(5)     print threading.current_thread().name, 'done'  def main():     print 'test start...', threading.current_thread().name     threads = []      print 'active threads num', threading.active_count()     print 'active threads list', threading.enumerate()      for i in range(10):         t = threading.Thread(target=func, args=())         threads.append(t)         print 'creat thread', t.name      print 'active threads num', threading.active_count()     print 'active threads list', threading.enumerate()      for i in range(10):         threads[i].start()         print threads[i].name, 'is started'         print 'active threads num', threading.active_count()         print 'active threads list', threading.enumerate()      print '-----------------------'     print 'active threads num', threading.active_count()     print 'active threads list', threading.enumerate()      for i in range(10):         threads[i].join()       print '-----------------------'     print 'active threads num', threading.active_count()     print 'active threads list', threading.enumerate()     print 'test done...', threading.current_thread().name  if __name__=='__main__':     main()`

    

    ```

    

    输出示例(谨慎操作,文件很乱):

    

    ```

    `test start... MainThread active threads num 1 active threads list [<_MainThread(MainThread, started 139754671793984)>] creat thread Thread-1 creat thread Thread-2 creat thread Thread-3 creat thread Thread-4 creat thread Thread-5 creat thread Thread-6 creat thread Thread-7 creat thread Thread-8 creat thread Thread-9 creat thread Thread-10 active threads num 1 active threads list [<_MainThread(MainThread, started 139754671793984)>] Thread-1 Thread-1 is startedstart  in Thread-1active threads num 2 active threads list  [[<_MainThread(MainThread, started 139754671793984)>, <Thread(Thread-1, started 139754535368448)>] <_MainThread(MainThread, started 139754671793984)>, <Thread(Thread-1, started 139754535368448)>] Thread-2 start in  Thread-2 Thread-2[<_MainThread(MainThread, started 139754671793984)>, <Thread(Thread-1, started 139754535368448)>, <Thread(Thread-2, started 139754526975744)>]  is started active threads num 3 active threads list [<_MainThread(MainThread, started 139754671793984)>, <Thread(Thread-1, started 139754535368448)>, <Thread(Thread-2, started 139754526975744)>] Thread-3 startThread-3  in Thread-3is started [ <_MainThread(MainThread, started 139754671793984)>active threads num 4, <Thread(Thread-1, started 139754535368448)> , <Thread(Thread-3, started 139754518583040)>, active threads list [<Thread(Thread-2, started 139754526975744)>] <_MainThread(MainThread, started 139754671793984)>, <Thread(Thread-1, started 139754535368448)>, <Thread(Thread-3, started 139754518583040)>, <Thread(Thread-2, started 139754526975744)>] Thread-4 startThread-4 in  Thread-4is started [ <_MainThread(MainThread, started 139754671793984)>, <Thread(Thread-1, started 139754535368448)>, <Thread(Thread-3, started 139754518583040)>, <Thread(Thread-2, started 139754526975744)>, active threads num 5<Thread(Thread-4, started 139754510190336)> ] active threads list [<_MainThread(MainThread, started 139754671793984)>, <Thread(Thread-1, started 139754535368448)>, <Thread(Thread-3, started 139754518583040)>, <Thread(Thread-2, started 139754526975744)>, <Thread(Thread-4, started 139754510190336)>] Thread-5 startThread-5 in  Thread-5 [<_MainThread(MainThread, started 139754671793984)>, <Thread(Thread-1, started 139754535368448)>, is started<Thread(Thread-2, started 139754526975744)>, <Thread(Thread-4, started 139754510190336)>, <Thread(Thread-3, started 139754518583040)>, <Thread(Thread-5, started 139754501797632)>]  active threads num 6 active threads list [<_MainThread(MainThread, started 139754671793984)>, <Thread(Thread-1, started 139754535368448)>, <Thread(Thread-2, started 139754526975744)>, <Thread(Thread-4, started 139754510190336)>, <Thread(Thread-3, started 139754518583040)>, <Thread(Thread-5, started 139754501797632)>] Thread-6 start in  Thread-6Thread-6 [ is started<_MainThread(MainThread, started 139754671793984)>, <Thread(Thread-1, started 139754535368448)>, <Thread(Thread-2, started 139754526975744)>, <Thread(Thread-6, started 139754493404928)>, <Thread(Thread-4, started 139754510190336)>, <Thread(Thread-3, started 139754518583040)>, <Thread(Thread-5, started 139754501797632)>]  active threads num 7 active threads list [<_MainThread(MainThread, started 139754671793984)>, <Thread(Thread-1, started 139754535368448)>, <Thread(Thread-2, started 139754526975744)>, <Thread(Thread-6, started 139754493404928)>, <Thread(Thread-4, started 139754510190336)>, <Thread(Thread-3, started 139754518583040)>, <Thread(Thread-5, started 139754501797632)>] Thread-7 startThread-7 in Thread-7  [is started<_MainThread(MainThread, started 139754671793984)>,  <Thread(Thread-1, started 139754535368448)>, <Thread(Thread-2, started 139754526975744)>, <Thread(Thread-6, started 139754493404928)>, <Thread(Thread-7, started 139754142168832)>, <Thread(Thread-4, started 139754510190336)>, <Thread(Thread-3, started 139754518583040)>active threads num 8, <Thread(Thread-5, started 139754501797632)>]  active threads list [<_MainThread(MainThread, started 139754671793984)>, <Thread(Thread-1, started 139754535368448)>, <Thread(Thread-2, started 139754526975744)>, <Thread(Thread-6, started 139754493404928)>, <Thread(Thread-7, started 139754142168832)>, <Thread(Thread-4, started 139754510190336)>, <Thread(Thread-3, started 139754518583040)>, <Thread(Thread-5, started 139754501797632)>] Thread-8 start in  Thread-8Thread-8 [ is started<_MainThread(MainThread, started 139754671793984)>, <Thread(Thread-1, started 139754535368448)>, <Thread(Thread-8, started 139754133776128)>,  <Thread(Thread-2, started 139754526975744)>, <Thread(Thread-6, started 139754493404928)>active threads num 9, <Thread(Thread-7, started 139754142168832)>,  <Thread(Thread-4, started 139754510190336)>, active threads list [<Thread(Thread-3, started 139754518583040)>, <Thread(Thread-5, started 139754501797632)>] <_MainThread(MainThread, started 139754671793984)>, <Thread(Thread-1, started 139754535368448)>, <Thread(Thread-8, started 139754133776128)>, <Thread(Thread-2, started 139754526975744)>, <Thread(Thread-6, started 139754493404928)>, <Thread(Thread-7, started 139754142168832)>, <Thread(Thread-4, started 139754510190336)>, <Thread(Thread-3, started 139754518583040)>, <Thread(Thread-5, started 139754501797632)>] Thread-9 startThread-9 in  Thread-9 [is started<_MainThread(MainThread, started 139754671793984)>, <Thread(Thread-1, started 139754535368448)>, <Thread(Thread-8, started 139754133776128)> , <Thread(Thread-9, started 139754125383424)>active threads num 10,  <Thread(Thread-2, started 139754526975744)>, <Thread(Thread-6, started 139754493404928)>, <Thread(Thread-7, started 139754142168832)>, active threads list [<Thread(Thread-4, started 139754510190336)>, <Thread(Thread-3, started 139754518583040)>, <Thread(Thread-5, started 139754501797632)>] <_MainThread(MainThread, started 139754671793984)>, <Thread(Thread-1, started 139754535368448)>, <Thread(Thread-8, started 139754133776128)>, <Thread(Thread-9, started 139754125383424)>, <Thread(Thread-2, started 139754526975744)>, <Thread(Thread-6, started 139754493404928)>, <Thread(Thread-7, started 139754142168832)>, <Thread(Thread-4, started 139754510190336)>, <Thread(Thread-3, started 139754518583040)>, <Thread(Thread-5, started 139754501797632)>] Thread-10 Thread-10 start in Thread-10is started [ <_MainThread(MainThread, started 139754671793984)>active threads num 11,  <Thread(Thread-1, started 139754535368448)>, <Thread(Thread-8, started 139754133776128)>active threads list , [<Thread(Thread-9, started 139754125383424)>, <Thread(Thread-2, started 139754526975744)>, <Thread(Thread-6, started 139754493404928)>, <Thread(Thread-7, started 139754142168832)>, <Thread(Thread-10, started 139754116990720)>, <Thread(Thread-4, started 139754510190336)>, <Thread(Thread-3, started 139754518583040)><_MainThread(MainThread, started 139754671793984)>, , <Thread(Thread-5, started 139754501797632)>] <Thread(Thread-1, started 139754535368448)>, <Thread(Thread-8, started 139754133776128)>, <Thread(Thread-9, started 139754125383424)>, <Thread(Thread-2, started 139754526975744)>, <Thread(Thread-6, started 139754493404928)>, <Thread(Thread-7, started 139754142168832)>, <Thread(Thread-10, started 139754116990720)>, <Thread(Thread-4, started 139754510190336)>, <Thread(Thread-3, started 139754518583040)>, <Thread(Thread-5, started 139754501797632)>] ----------------------- active threads num 11 active threads list [<_MainThread(MainThread, started 139754671793984)>, <Thread(Thread-1, started 139754535368448)>, <Thread(Thread-8, started 139754133776128)>, <Thread(Thread-9, started 139754125383424)>, <Thread(Thread-2, started 139754526975744)>, <Thread(Thread-6, started 139754493404928)>, <Thread(Thread-7, started 139754142168832)>, <Thread(Thread-10, started 139754116990720)>, <Thread(Thread-4, started 139754510190336)>, <Thread(Thread-3, started 139754518583040)>, <Thread(Thread-5, started 139754501797632)>] Thread-4 Thread-1 done  Thread-7Thread-10 done  Thread-5 doneThread-6  Thread-2 Thread-9done done  doneThread-3 Thread-8done    donedonedone   ----------------------- active threads num 1 active threads list [<_MainThread(MainThread, started 139754671793984)>] test done... MainThread`

    

    ```

    

    输出示例

    

3.  多线程使用示例二

    

    ```

    `import threading from time import ctime, sleep  loops = (4, 2)   class MyThread(threading.Thread):     def __init__(self, func, args, name=''):         threading.Thread.__init__(self)         self.name = name         self.func = func         self.args = args      def getResult(self):         return self.res      def run(self):         print 'starting', self.name, 'at:', ctime()         self.res = self.func(*self.args)         print self.name, 'finished at:', ctime()    def loop(nloop, nsec):     print 'start loop', nloop, 'at', ctime()     sleep(nsec)     print 'loop', nloop, 'done at:', ctime()   def main():     print 'starting at:', ctime()     threads = []     nloops = range(len(loops))      for i in nloops:         t = MyThread(loop,(i, loops[i]), loop.__name__)         threads.append(t)       for i in nloops:         threads[i].start()      for i in nloops:         threads[i].join()      print 'all done at:', ctime()   if __name__=='__main__':     main()`

    

    ```

    

    输出示例:

    

    ```

    `starting at: Sat Oct  6 00:58:05 2018 starting loop at: Sat Oct  6 00:58:05 2018 start loop 0 at Sat Oct  6 00:58:05 2018 starting loop at: Sat Oct  6 00:58:05 2018 start loop 1 at Sat Oct  6 00:58:05 2018 loop 1 done at: Sat Oct  6 00:58:07 2018 loop finished at: Sat Oct  6 00:58:07 2018 loop 0 done at: Sat Oct  6 00:58:09 2018 loop finished at: Sat Oct  6 00:58:09 2018 all done at: Sat Oct  6 00:58:09 2018`

    

    ```

    

    输出示例

    

4.  自定义Thread类 my\_thread\_module.py

    

    ```

    `import threading from time import ctime, sleep   class MyThread(threading.Thread):     def __init__(self, func, args, name=''):         threading.Thread.__init__(self)         self.name = name         self.func = func         self.args = args      def getResult(self):         return self.res      def run(self):         print 'starting', self.name, 'at:', ctime()         self.res = self.func(*self.args)         print self.name, 'finished at:', ctime()`

    

    ```

    

5.  单线程和多线程的比较

    

    ```

    `from my_thread_module import MyThread from time import ctime, sleep  def fib(x):     sleep(0.005)     if x < 2: return 1     return (fib(x-1) + fib(x-2))  def fac(x):     sleep(0.1)     if x < 2: return 1     return (x * fac(x-1))  def sum(x):     sleep(0.1)     if x < 2: return 1     return (x + sum(x-1))  funcs = [fib, fac, sum] n = 12  def main():     nfuncs = range(len(funcs))      print '***single thread***'     for i in nfuncs:         print 'starting', funcs[i].__name__, 'at:', ctime()         print funcs[i](n)         print funcs[i].__name__, 'finished at:', ctime()      print '\n***multiple threads***'     threads = []     for i in nfuncs:         t = MyThread(funcs[i],(n,),funcs[i].__name__)         threads.append(t)      for i in nfuncs:         threads[i].start()      for i in nfuncs:         threads[i].join()         print threads[i].getResult()      print 'all done'  if __name__=='__main__':     main()`

    

    ```

    

    输出示例:单线程用时5秒,多线程2秒

    

    ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值