我有一个Python应用程序(带有GUI,使用PyQt4),用户可以生成多个实例。该应用程序用于执行一些长时间运行的任务(大约需要几小时到几天),因此我愿意添加一个额外的“监视”应用程序,它将执行以下操作:
- 查找其他应用程序的所有运行进程 - 获取正在运行的操作的状态(已完成的作业、百分比、错误消息等) - 最终向应用程序发送一些命令,告诉它们暂停、恢复、停止等。
适合此工作的一种方法是RPyC,唯一的问题是,它似乎只能在TCP套接字上工作,就像我发现的大多数RPC库一样。但这导致必须打开几个不必要的套接字,仅侦听本地主机,并且必须创建某种端口分配机制,以避免两个进程尝试侦听相同的端口。然后监视器需要在某处编写端口列表,或者查找侦听TCP端口并尝试确定它们是否为正确应用程序的实例。听起来很混乱。
我目前能想到的管理互相通信的最好方式是使用一些Unix套接字,假设在'/var/run/myapp/myapp-.sock'中,并创建一个模块来完成所有工作,公开一些方法,如
现在,我正在寻找最佳方法来实现它。 真的没有已经完成的管理Unix套接字上RPC的东西吗?对我来说听起来有点奇怪,但我找不到任何适合的东西..
有什么建议吗?
注意:我不想颠倒事情(应用程序是单个监视服务器的客户端),以避免在监视应用程序崩溃时出现问题,并让我自由地创建其他连接到这些套接字并发出请求的应用程序。
注意:安全性不是问题,因为所有这些都在私有、封闭和防火墙网络中运行 :),此外,只有受信任的用户在本地主机上进行请求。
- 查找其他应用程序的所有运行进程 - 获取正在运行的操作的状态(已完成的作业、百分比、错误消息等) - 最终向应用程序发送一些命令,告诉它们暂停、恢复、停止等。
适合此工作的一种方法是RPyC,唯一的问题是,它似乎只能在TCP套接字上工作,就像我发现的大多数RPC库一样。但这导致必须打开几个不必要的套接字,仅侦听本地主机,并且必须创建某种端口分配机制,以避免两个进程尝试侦听相同的端口。然后监视器需要在某处编写端口列表,或者查找侦听TCP端口并尝试确定它们是否为正确应用程序的实例。听起来很混乱。
我目前能想到的管理互相通信的最好方式是使用一些Unix套接字,假设在'/var/run/myapp/myapp-.sock'中,并创建一个模块来完成所有工作,公开一些方法,如
listMyApps()
和getMyApp(pid)
,分别返回pid列表和可用于与该应用程序通信的对象。现在,我正在寻找最佳方法来实现它。 真的没有已经完成的管理Unix套接字上RPC的东西吗?对我来说听起来有点奇怪,但我找不到任何适合的东西..
有什么建议吗?
注意:我不想颠倒事情(应用程序是单个监视服务器的客户端),以避免在监视应用程序崩溃时出现问题,并让我自由地创建其他连接到这些套接字并发出请求的应用程序。
注意:安全性不是问题,因为所有这些都在私有、封闭和防火墙网络中运行 :),此外,只有受信任的用户在本地主机上进行请求。