(転)python学習ノート——Thread常用方法

8468 ワード

最近はプロジェクトをしていますが、pythonの中のジョンとデーモンのプロセスを使って、一度見たことがあります.また忘れてしまいました.
重複した仕事をしなくなりました.少年のブログを探しました.詳しく書きました.転載しました.http://blog.sina.com.cn/s/blog_4 b 503921100 eye.
Threadオブジェクトのいくつかの方法:
       ,  threading    Thread  ,   start run       ,start()    Thread    run  ,      ,     start     ,   run  。

             :
1 join方法は、スレッドまたは関数が実行中に他のスレッドを呼び出し、それが完了してから実行される場合、このスレッドを呼び出すときには、スレッドを呼び出すためのjoin方法が使用されてもよい.
ジョン([timeout])
         ,           ,         ,             ,
             。
例を見ます
 import threading
import time
 class MyThread(threading.Thread):
      def __init__(self,id):
             threading.Thread.__init__(self)
             self.id=id
      def run(self):
             x=0
             time.sleep(20)
             print self.id
 def func():
      t.start()
      for i in range(5):
             print i
 t=MyThread(2) func() 0 1 2 3 4 >>> 2 
funcの中でスレッドが既に実行されていますが、関数はスレッドの運転が終了するまで実行していません.まずFncを実行して0から4を印刷して、sleep(20)を待って、20秒後にこのMyThread(2)を出力します.
>>> def func():

      t.start()

      t.join()

      for i in range(5):

             print i



>>> t=MyThread(3) >>> func() 3 0 1 2 3 4 >>>  
これは、t.start()の運転開始時間が20秒後に、idが3でプリントアウトされ、その後funcが運転を続けて、0から4までプリントアウトされます.
  • set Daemen()メソッド
  • この方法は基本的にジョンとは逆である.私たちはプログラム実行中にメインスレッドを実行します.もしメインスレッドがもう一つのサブスレッドを作成すると、メインスレッドとサブスレッドは別々に運行します.サブスレッドが完了していない場合、メインラインはサブスレッドの完了を待って終了します.しかし、たまに必要なのは、メインスレッドが完成したら、パイプスレッドが完成したら、メインスレッドと一緒に脱退します.この時にsetDaemen方法を使うことができます.
    以下の例は、メインスレッドの終了後にサブスレッドを設定して終了することです.
    import threading
    
    import time
    
    
    
    class myThread(threading.Thread):
    
        def __init__(self,threadname):
    
            threading.Thread.__init__(self,name=threadname)
    
        def run(self):
    
            time.sleep(5)
    
    
    
            print self.getName()
    
    
    
    def fun1():
    
        t1.start()
    
        print 'fun1 done'
    
    
    
    def fun2():
    
        t2.start()
    
        print 'fun2 done'
    
    
    
    t1=myThread('t1')
    
    t2=myThread('t2')
    
    t2.setDaemon(True)
    
    fun1()
    
    fun2()
    
    上記の例では、私達が想定した出力の場合:
    fun1 done
    
    fun2 done
    
     t1
    しかし、実際に私たちはインタラクティブモードで、メインスレッドはpythonが終了する時だけ終了します.だから、結果t 2もプリントされました.
    3.isAlive方法
    スレッドが作成されると、ThreadオブジェクトのisAlive方法を使ってスレッドが実行されているかどうかを確認することができます.
    >>> import threading
    
    >>> import time
    
    >>> class myThread(threading.Thread):
    
           def __init__(self,id):
    
                  threading.Thread.__init__(self)
    
                  self.id=id
    
           def run(self):
    
                  time.sleep(5)
    
                  print self.id
    >>> t=myThread(1)
    
    >>> def func():
    
           t.start()
    
           print t.isAlive()
    
    >>> func()
    
    True
    
    >>> 1
    
  • スレッド名
  • スレッドが作成されると、スレッドは名来で区別され、スレッドは制御されます.スレッド名はクラスの初期化関数で定義できますが、ThreadオブジェクトのsetNameメソッドで設定することもできます.以下は異なる方法でスレッド名を設定します.
    >>> import threading
    
    >>> class mythread(threading.Thread):
    
           def __init__(self,threadname):
    
                  threading.Thread.__init__(self,name=threadname)
    
           def run(self):
    
                  print self.getName()
    
    >>> t1=mythread('t1')
    
    >>> t1.getName()
    
    't1'
    
    >>> t1.setName('T')
    
    >>> t1.getName()
    
    'T'
    
    >>> t2=mythread('t2')
    
    >>> t2.start()
    
    t2
    
    >>>
    
    
    
    >>> t2.getName()
    
    't2'
    
    >>> t2.setName('TT')
    
    >>> t2.getName()
    
    'TT'