首页 > 解决方案 > 在单个 SSH 连接中生成多个 Python 实例的最简单方法

问题描述

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

在这一点上,一切都运行良好,但是,有 4 个单独的 SSH 连接到机器是不可行的。本质上,我正在寻找一种方法来生成 4 个单独的 Python 实例:

  1. 不受全局解释器锁定
  2. 能够相互传递变量

目前该系统基于 Python 2.7。我已经尝试过使用 Python 3 (for asyncio) 无济于事。我也尝试使用multiprocessingandthreading模块,但没有成功。

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

谢谢,亚当

标签: pythonbashshellsshraspberry-pi

解决方案


由于这似乎是解决方案:

您只需与调用单个脚本的机器建立一个 SSH 连接:

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

该脚本将调用您的所有函数:

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

行尾的 表示该&行的命令将在后台运行,并且 bash 在开始下一行之前不会等待该行完成。on last 命令是可选的&,具体取决于您是否要立即返回到命令提示符。

对于您的评论,不会禁止对标准输出的写入;您将看到所有 4 个 python 脚本的输出根据每个脚本的距离混合在一起。


推荐阅读