在单个SSH连接中生成多个Python实例的最简单方法

时间:2018-06-07 20:39:19

标签: python bash shell ssh raspberry-pi

我有一个基于Raspberry Pi的项目,运行最新版本的Raspbian Jessie。 4个独立的Python脚本(包含用于操作多个步进电机的无限循环,其他硬件设备以及ADC和输入设备的轮询)在4个独立的SSH连接中同时运行,并通过简单的UDP套接字服务器在彼此之间进行数据通信。

此时一切正常,但是,与机器建立4个独立的SSH连接是不可行的。从本质上讲,我正在寻找一种方法来生成4个独立的Python实例:

  1. Aren不受Global Interpreter Lock
  2. 的约束
  3. 能够将变量相互传递
  4. 目前该系统基于Python 2.7。我尝试使用Python 3(asyncio)无济于事。我也尝试使用multiprocessingthreading模块,但未成功。

    我不一定需要另一个Python脚本来生成所有4个实例;一个shell脚本就好了。我理解可能使用os.subprocess(shell=True)或其他类似的东西?

    谢谢, 亚当

2 个答案:

答案 0 :(得分:2)

因为这似乎是解决方案:

您只需要一台SSH连接到调用单个脚本的计算机:

ssh me@raspi "bash ~/caller.sh"

该脚本将调用您的所有功能:

#!/usr/bin/env bash
python script1.py &
python script2.py &
python script3.py &
python script4.py &

该行末尾的&表示该行的命令将在后台运行,bash不会等到该行完成后再启动下一行。最后一个命令的&是可选的,具体取决于您是否要立即返回命令提示符。

对于你的评论,写入stdout不会被抑制;您将看到所有4个python脚本的输出根据每个脚本的距离而混合。

答案 1 :(得分:0)

启动4个后台作业的bash脚本可能适用于PoC阶段和测试。但是如果以后你想要可靠地运行你的代码超过几分钟,你需要实现一些监督逻辑。我的建议是使用systemd来设置1个控制器和4个工作服务。通过这种方式,systemd将大量提升您的服务的监控/重启/等等,您只需使用ssh来控制主服务。