2016-03-31 5 views
0

Я использую скрипт python с многопроцессорным модулем для одновременного запуска двух процессов. Каждый процесс занимает 4-5 минут. Я не могу запустить оба процесса одновременно. Ниже мой сценарий.Сценарий Python для одновременного запуска двух процессов

Мой сценарий запускается на сервере C, и он принимает два аргумента в качестве IP-адресов и принимает MTR с сервера A & B. A ----> B & B -----> A. Это должно произойти одновременно.

import paramiko 
    import os 
    import argparse 
    from multiprocessing import Process, Queue, Lock 

    parser = argparse.ArgumentParser() 
    parser.add_argument("ip1", help="Input the Source IP Address: ") 
    parser.add_argument("ip2", help="Input the Destination IP Address: ") 
    args = parser.parse_args() 


    class Myssh: 
     def __init__(self, iph, ipd): 
      self.iph = iph 
      self.ipd = ipd 
      self.cmd = "mtr --no-dns -rwc 300 %s" % ipd 

     def do(self): 
      count = 1 
      print "Starting Thread" 
      client = paramiko.SSHClient() 
      client.set_missing_host_key_policy(paramiko.WarningPolicy()) 
      client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
      key = os.path.expanduser(r'/home/rsharma/master004_rsa') 
      privkey = paramiko.RSAKey.from_private_key_file(key) 
      client.connect(self.iph, port=12001, username="master", pkey=privkey, look_for_keys=False) 
      stdin, stdout, stderr = client.exec_command(self.cmd) 
      for line in stdout: 
       print '...' + line.strip('\n') 
      client.close() 


    if __name__ == "__main__": 
     lock = Lock() 
     s1 = Myssh(args.ip1, args.ip2) 
     s2 = Myssh(args.ip2, args.ip1) 
     p1 = Process(target=s1.do()) 
     p1.start() 
     p2 = Process(target=s2.do()) 
     p2.start() 
     p1.join() 
     p2.join() 
+0

В настоящее время мой скрипт выполняет оба процесса последовательно не параллельно. Я хочу, чтобы он запускал обе команды параллельно и завершал через 5 минут в течение 10 минут. –

+0

@timlyo Если вы отредактируете отступы (и вы действительно не должны в большинстве случаев), по крайней мере убедитесь, что вы не меняете цель кода. Жаль, что это было одобрено рецензентами, которые не обращают внимания. –

ответ

2

Этот код говорит, что запустите функцию и установите, что она возвращает в качестве цели процесса. Вы должны изменить эти строки

p1 = Process(target=s1.do()) 
p2 = Process(target=s2.do()) 

в

p1 = Process(target=s1.do) 
p2 = Process(target=s2.do) 

Скобки после функции, запустив его там и тогда.

+0

Спасибо за ответ. Я не получаю никаких ошибок из-за отступов. Просьба пояснить ваш комментарий по отступу в моем сценарии. –

+0

Ошибка не из отступа. Я просто пытался отформатировать код в вашем ответе, чтобы он выглядел лучше. Вам нужно удалить скобки после 's1.do' в вашем коде. См. Мой ответ. – timlyo