2014-02-28 71 views
0
  1. 我有一個名爲grep_phalanx_log的方法,其功能是SSH連接到一臺機器,grep連接一些值。
  2. 我的主要方法將使用不同的主機名/憑證,日誌文件名,grep模式來調用此方法。
  3. 因此,我需要在PARALLEL中的兩個不同服務器上grep一個SAME模式。如果在一臺服務器中找到匹配項,我希望其他服務器停止擦除。如果在這兩個服務器中找不到特定時間的模式,我的方法grep_phalanx_log將返回一個負值。基於負面價值,我必須繼續其他一些要求。
class eventFlowTestNfx(object) 
    def grep_phalanx_log(self, host_name, username, password, grep_cmd, timeout=10, time_to_monitor=20): 
     ssh_client = paramiko.SSHClient() 
     ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
     Log.info("Grep command to be executed: %r" % grep_cmd) 
     try: 
      ssh_client.connect(host_name, username=username, password=password, timeout=timeout) 
      end_time = time.time() + time_to_monitor 
      while time.time() < end_time: 
       ssh_stdin, ssh_stdout, ssh_stderr = ssh_client.exec_command(grep_cmd) 
       output = ssh_stdout.read() 
       if not output: 
        time.sleep(1) 
       else: 
        Log.info("NFX: Match message from %r is %r" % (host_name, output)) 
        return output 
      if not output: 
       Log.error("FAILED: Message not processed.") 
       Log.error("Host Name: %r and grep command: %r" % (host_name, grep_cmd)) 
       raise Exception("NFX agent could not process message") 
     except: 
      Log.error("End to End flow is broken, check the logs!") 
      return -1 
    def main(self): 
     for cr_dict in correlation_list: 
      cr_process = multiprocessing.Process(target=self.grep_phalanx_log(), args=(cr_dict["host"], cr_dict["username"], cr_dict["password"], cr_received_cmd_skeleton,)) 
      cr_process.start() 

所以,我有我的代碼凝視着2個過程,我不知道他們會如何相互交談和終止等。Python多處理 - 在子進程之間傳遞值

+0

您的代碼有多個與您的問題無關的錯誤。 – jfs

回答

0

您可以取代time.sleep(1)有:

if not output.strip(): # blank output 
    is_found = found.wait(1) # sleep >= 1 second unless found 
    if is_found: 
     break # stop grepping 
else: # found something 
    found.set() 
    ... 
    return output 

其中found = multiprocessing.Event():科瑞它的父進程,並傳遞給每一個孩子。

相關問題