2012-01-19 18 views
0

私はこれを尋ねる最善の方法はわかりません(それゆえに、厄介なタイトル)。 threading.Threadサブクラスのrun()メソッドでは、異なるメソッドが実行されたあとも返される必要があるinfループがあります。これはどのように達成されますか?ここで私はこれまでのところ(私は同じThreadインスタンス内plistオブジェクトの周りRLock()のが必要なのでしょうか?)したものであるdiffernetメソッドを呼び出した後にスレッドメソッドに戻る

class pMonitor(Thread): 
    def __init__(self): 
     Thread.__init__(self) 
     self.daemon = True 
     self.plist = [] 

    def run(self): 
     while True: 
      for p in self.plist: 
       if not p.isRunning(): 
        p.run() 
      time.sleep(1) 

    def addproc(self, cmdline): 
     self.plist.append(Proc(cmdline)) 

addprocを呼び出す場合、どのように私はrun()内のループに戻りますか? (?またはどのようにこれは同じ効果に書き込む必要があります)

答えて

1

あなたはQueue.Queueを使用することができます。

def runproc(queue): 
    plist = [] 
    while True: 
     try: cmdline = queue.get_nowait() 
     except Empty: pass 
     else: plist.append(Proc(cmdline)) 

     for p in plist: 
      if not p.isRunning(): 
       p.run() 
     time.sleep(1) 

queue = Queue()    
t = Thread(target=runproc, args=(queue,)) 
t.daemon = True 
t.start() 

queue.put(cmdline) 
# ... 

あなたはplistからプロセスを削除するロジックを追加する必要があります。

関連する問題