gerrit
イベントをssh
コマンドで監視しようとしています。コマンドは次のとおりです。ssh接続をデーモンとして実行
ssh -p 29418 review.example.com gerrit stream-events
私は別のports
上で実行されている様々なgerrit
のインスタンスを監視し、これらのgerrit
インスタンスから受信したイベントにさらなる分析を実行する必要があります。私はpython
を使ってコードを使ってやりたいと思います。これらのさまざまな接続を複数のプロセスとして実行することを検討しましたが、multiprocessing
python
パッケージを使用して、daemon
属性を使用してdaemon
としてプロセスを実行しようとしました。以下は私のコードのスニペットです。
import multiprocessing as mp
class MyProcess(mp.Process):
def __init__(self, target, args):
mp.Process.__init__(self, target=target, args=args)
while True:
running = get_runnig_instances() #get all the running gerrit instances
for instance in running:
port_num = instance.port
url = instance.ip
proc = MyProcess(target=client_setup, args=(url,port_num,)) #client_setup(url,port_num) is a function that runs the command for the ssh connection to stream gerrit events
proc.daemon = True
proc.start()
proc.join()
これは最初のgerrit
例えばsshコマンドを実行しているコントロールが機能client_setup
から上記のコード片に戻って来ていないと屋台が接続を確立し、あらゆる可能性をキャプチャするために待って動作しませんでしたイベント。したがって、他の実行中のインスタンスはすべてキャプチャされません。
また、毎回get_running_instances
関数は、異なる実行セットのgerrit
インスタンスを返します。それで、私は一度にすべてのプロセスを作成することはできません。
私は同じことを達成するためにdaemon
パッケージを使用しようとしました。以下はコードのスニペットです。
import multiprocessing as mp
import daemon
class MyProcess(mp.Process):
def __init__(self, target, args):
mp.Process.__init__(self, target=target, args=args)
while True:
running = get_runnig_instances() #get all the running gerrit instances
for instance in running:
port_num = instance.port
url = instance.ip
with daemon.DaemonContext():
proc = MyProcess(target=client_setup, args=(url,port_num,)) #client_setup(url,port_num) is a function that runs the command for the ssh connection to stream gerrit events
proc.start()
proc.join()
私はここで同じ問題に直面しました。これについてどうすればいいですか?私は何が間違っているのか分かりませんし、助けが必要です。
大変申し訳ございません。
私は 'asyncio'を調べます。私のユースケースに合っているようだ。ありがとうございました。 – nidHi
また、 'parallel-ssh'はこのユースケースにとって良いものでしょうか? – nidHi
私はparallel-sshを使用していませんが、かなりアクティブに見え、その代替案に対して有効な議論をしています。おそらくあなたが使用しているPythonのインストールと一緒にgeventをインストールして使用することができれば、エントリーの障壁が最も低いオプションのように聞こえます。 Parallel sshがまだpython 3をサポートしていないというスレッドがあります。なぜなら、geventはまだそれを広範にサポートしていないからです。 – parity3