我试图通过ssh
命令监视gerrit
事件。该命令如下。作为守护进程运行ssh连接
ssh -p 29418 review.example.com gerrit stream-events
我需要监视在不同ports
运行的各种这样gerrit
实例和对从这些gerrit
实例接收到的事件执行进一步的分析。我想通过使用python
的代码来完成。我考虑将这些各种ssh
连接作为多个进程运行,为此我使用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()
这并没有为运行SSH命令第一gerrit
实例的控制不从功能client_setup
回到上面这段代码和摊位那里建立连接,等待捕捉任何可能的工作后,事件。因此,任何其他正在运行的事件都不会被捕获。
而且,get_running_instances
函数每次都返回一组不同的运行实例。因此,我无法一次创建所有流程。
我也试过用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