2016-03-31 20 views
0

私は、同時に2つのプロセスを実行するために、マルチプロセッシングモジュールを持つpythonスクリプトを使用しています。各プロセスは完了するのに4〜5分かかります。私は両方のプロセスを同時に実行することができません。以下は私のスクリプトです。2つのプロセスを同時に実行するPythonスクリプト

スクリプトはサーバーCで実行され、IPアドレスとして2つの引数をとり、サーバーAから&のMTRを受け取ります。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

関連する問題