python - 如何获取另一台机器上运行的作业的状态?

标签 python request remote-server job-scheduling

我有2台机器A和B,A可以向B发送restful请求,如下所示:

curl -XPOST -H "Content-type: application/json" -d '{"data":"python /tmp/demo.py","action":"demo"}' 'http://192.168.95.8:51888/api/host'

我在B上部署了一个api服务,当收到这样的请求时,B会执行python脚本/tmp/demo.py,执行时间可能会持续0.5-3小时。

我的问题是:

1) 如何在 A 上编写一个作业,持续跟踪 B 上运行的任务的状态,并在任务成功完成或失败时自行结束?

2)在跟踪作业中,如何添加一个在超过预设时间阈值后可以自行杀死的模块?

最佳答案

将作业视为 HTTP 资源。当您执行 POST/api/host 时,该请求会为该作业创建一个新 ID 并返回它。为了充分利用 HTTP,响应将包含 Location header ,其中包含可以检查作业状态的资源的 URL,例如:

POST /api/hosts
Content-type: application/json

{"data":"python /tmp/demo.py","action":"demo"}
HTTP/1.1 201 Created
Location: /api/host/jobs/c2de232b-f63e-4178-a053-d3f3459ab538

您现在可以随时 GET/api/host/jobs/c2de232b-f63e-4178-a053-d3f3459ab538 并查看作业的状态,例如:

{"status": "pending"}

您可以向该资源POST命令,例如用于取消它。

您的 HTTP API 如何准确地获取该 Python 脚本的状态显然取决于您。也许它可以通过套接字与其进行通信,或者作业本身会定期将其状态写入某个数据库或文件。

关于python - 如何获取另一台机器上运行的作业的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58725444/

相关文章:

request - 如何在shopware 6中访问订阅者中的请求数据

java - 如何在另一个servlet中使用其他servlet服务?

linux - 在远程服务器上触发作业时防止 nohup 输出

python - 合并两个 Google App Engine 数据存储结果?

python - Matlab 过滤器与 Python lfilter ValueError 对象深度太小

iphone - 如何使用 parse.com 从特定日期检索所有对象?

pycharm - 使用 PyCharm 远程运行非 python 脚本

python - 如何按索引替换整个 Pandas DataFrame 列?

python - 如何在 github 操作上使用 Maven 进行构建并存储 python 输出

REST Servlet 正在开发中,但在远程 Tomcat 上