2017-06-07 66 views
1

我希望在不同的線程與python3執行兩個不同的命令執行在differrent線程不同的系統命令,下面是我的代碼:如何與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 ...(不多於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,您應該添加whilesniffdata2()

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',它就無法工作有了多線程,我必須使用多進程。 –