python 进程池与队列结合_Python多处理将命令传递到进程/池/队列?

不幸的是,我试图一次与14个raspberry pi进行通信(艺术项目、burning man、don't ask…)并使用Paramiko通过SSH连接到RPi,然后发出其他各种命令:同步文件、启动服务器等等。。。在

为此,我一直在使用python中的多处理模块,但是遇到了错误。在连接到各种rpi之后,我希望python脚本挂起并等待输入,例如:start server(传递服务器名称、位置等),它将通过Paramiko发送ssh命令,在每个rpi上开始运行python脚本。在

我的问题是:如何确保将适当的命令发送到正确的进程/池?例如,如果我实例化连接到各种rpi的类,然后发出start server命令,我希望:

要用名称A初始化的RPi_A上的服务器,

要用名称B初始化的RPi_B上的服务器,

而不是名为B的RPi_,等等。。。在

我需要为此使用process命令吗?或者说游泳池有用吗?如果是这样的话,那么apply\u async,map,map_async。不幸的是,文件有点模糊。在

样本代码:import sys

import time

import paramiko

import multiprocessing as mp

login = 'pi'

password = 'raspberry'

serverIp = '192.168.1.143'

config = [

{'hostname': 'pi1.local', 'name': 'carousel'},

{'hostname': 'pi2.local', 'name': 'bench'}

]

class Dreamlandia():

def __init__(self):

pool = mp.Pool(processes=12)

results = [pool.apply_async(self.connectToServer, args=(dreamlandObject,)) for dreamlandObject in config]

output = [p.get() for p in results]

def connectToServer(self, dreamlandObject):

host = dreamlandObject['hostname']

structureName = dreamlandObject['name']

i = 1

while True:

try:

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(host, username=login, password=password)

print ("Connected to " + structureName)

break

except paramiko.AuthenticationException:

print ("Authentication failed when connecting to " + structureName)

sys.exit(1)

except:

print ("Could not SSH to " + structureName + ", waiting for it to start")

i += 1

time.sleep(1)

# If we could not connect within time limit

if i == 30:

print ("Could not connect to " + structureName + ". Giving up")

sys.exit(1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值