Python进程间通信

标签 python rpc

我有一个 Python 应用程序(带有 GUI,使用 PyQt4),它在多个实例中由用户生成。该应用程序用于执行一些长时间运行的任务(大约几个小时到几天),因此我愿意添加一个额外的“监控”应用程序来执行以下操作:

  • 找到其他应用程序的所有正在运行的进程
  • 获取正在运行的操作的状态(完成的作业、百分比、错误消息...)
  • 最终向应用程序发送一些命令,告诉它们暂停、恢复、停止……

适合这项工作的一种方式是 RPyC ,唯一的问题是,它似乎只能在 TCP 套接字上工作,就像我发现的大多数 RPC 库一样。但这导致不得不打开几个不需要的套接字,只在本地主机上监听,并且必须创建某种端口分配机制来避免两个进程试图监听同一个端口。然后监视器需要一个端口列表写在某个地方,或者去寻找监听 TCP 端口的进程并试图弄清楚它们是否是正确应用程序的实例或 ot。听起来很乱。

目前我能想到的最好的管理相互通信的方法是在'/var/run/myapp/myapp-.sock'中有一些unix套接字,然后创建一个模块来完成所有工作肮脏的东西暴露了一些方法,如 listMyApps()getMyApp(pid) 返回第一个 pid 列表,第二个返回可用于与该应用程序通信的对象.

现在,我正在寻找实现该目标的最佳方法.. 实际上,现在还没有任何东西可以通过 unix 套接字管理 RPC 吗?对我来说听起来有点奇怪,但我找不到任何适合的东西..

有什么建议吗?

注意:我不想颠倒事情(应用程序是单个监控服务器的客户端)以避免在监控应用程序崩溃的情况下出现问题,并让我自由地创建其他应用程序连接到这些套接字并发出请求。

注意:安全不是问题,因为所有这些东西都在私有(private)、封闭和防火墙网络中运行:),另外,请求仅由受信任的用户在本地主机上完成。

最佳答案

But this leads to having to open several unneeded sockets listening only on localhost, and having to create some kind of ports allocation mechanism to avoid two processes trying to listen on the same port

不完全是。首先,这就是大多数进程间通信的工作方式,通过套接字。 TCP 套接字或 UNIX 套接字。这基本上(不完全是)您在输出标准等时所做的事情。

您还可以使用操作系统信号。尽管您必须记住只有每个进程的主线程才能进行信号处理,因此您必须小心不要阻塞它。

但无论采用何种方式,几乎都无法绕过使用套接字连接。

关于Python进程间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4924083/

相关文章:

python - PyQt Qthread自动重启

python - 字典中的字典中的字典到 Pandas 数据框

python - 如何使用 GeoIP2() django 模型从 IP 地址调用中提取保存的信息以显示在我的 html 中

serialization - 我需要一个 D 的序列化框架

centos7 - mount.nfs : Connection timed out for Centos 7 machines 故障排除

python - 简单标记作为模板中的变量

python - sklearn 中的 fit_transform、transform 和 pandas 中的 get_dummies 之间有什么不同?

c++ - 使用 C++ 客户端访问 C++ 服务器时出现问题

google-app-engine - Google Web Toolkit (GWT) + Google App Engine (GAE) + 分离数据持久化

go - RPC 响应不正确