2017-06-07 5 views
1

とdifferrentスレッドでコマンドを私のコードです:...Iは、以下の、のpython3で別のスレッドで二つの異なるコマンドを実行したいのpython3

import time 
import threading 
import os 

class MyThread(threading.Thread): 

    def __init__(self, func, args, name=''): 
     threading.Thread.__init__(self) 
     self.name = name 
     self.func = func 
     self.args = args 

    def run(self): 
     self.result = self.func(*self.args) 

    def get_result(): 
     return self.result 


def sniffdata1(): 
    while 1: 
     time.sleep(1) 
     os.system("echo 2") 

def sniffdata2(): 
     time.sleep(1) 
     os.system("echo 1") 

sniffThread1=MyThread(sniffdata1,()) 
sniffThread2=MyThread(sniffdata2,()) 
sniffThread1.start() 
sniffThread2.start() 
sniffThread1.join() 
sniffThread2.join() 

しかし、私は私の121212を得ることができません、結果は1 2 2 2 2 2 2 2 2 ...(もう1つはありません)ですが、エコー2はいつも助けてくれますか?

+0

あなたが書いたとおりです:1を印刷しているスレッドは、単に1のためにスリープしていて、 'echo 1'を呼び出して終了します。 –

+0

ありがとう、ありがとう。 –

答えて

0

以下、私はそれに対処するために、複数のプロセスを使用し、それは動作しますが、私はその理由について非常に明確ではないよ、私のソリューションコードです:

from multiprocessing import Process 
import os 
import time 

def worker1(): 
    """test python multi process""" 
    while 1: 
     time.sleep(1) 
     os.system("echo 1") 
     #os.system("ping www.baidu.com") 

def worker2(): 
    """test python multi process""" 
    while 1: 
     time.sleep(2) 
     os.system("echo 2") 
     #os.system("ping www.bing.com") 

def main(): 
    jobs = [] 
    p1 = Process(target=worker1,args=()) 
    p2 = Process(target=worker2,args=()) 
    jobs.append(p1) 
    jobs.append(p2) 
    p1.start() 
    p2.start() 
    ##to avoid defunct process,you should call join() 
    for j in jobs: 
    j.join() 

if __name__=='__main__': 
    main() 
1

あなたが1以上を取得したい場合は、あなたが追加する必要がありますsniffdata2()while

def sniffdata2(): 
    while 1: 
     time.sleep(1) 
     os.system("echo 1") 

しかし、あなたは12121212...すべての時間を取得したい場合、あなたはこのコードを使用する必要があります。

import time 
import threading 
import os 
flag2 = False; 
flag1 = True; 

class MyThread(threading.Thread): 

    def __init__(self, func, args, name=''): 
     threading.Thread.__init__(self) 
     self.name = name 
     self.func = func 
     self.args = args 

    def run(self): 
     self.result = self.func(*self.args) 

    def get_result(self): 
     return self.result 


def sniffdata1(): 
    global flag2, flag1 
    while 1: 
     if flag1: 
      flag2 = False 
      time.sleep(1) 
      os.system("echo 1") 
      flag1 = False 
      flag2 = True 

def sniffdata2(): 
    global flag2, flag1 
    while 1: 
     if flag2: 
      flag1 = False 
      time.sleep(1) 
      os.system("echo 2") 
      flag2 = False 
      flag1 =True 

sniffThread1=MyThread(sniffdata1,()) 
sniffThread2=MyThread(sniffdata2,()) 
sniffThread1.start() 
sniffThread2.start() 
+0

あなたの答えをありがとう、それは私を助けてくれました。しかし、私は、 'ping ww.baidu.com'と' ping www.bing.com'を使って 'echo 1'と' echo 2'を置き換えると、うまくいきませんマルチスレッドでは、私はマルチプロセスを使用する必要があります。 –

関連する問題