首页 > 解决方案 > 从 Linux 上的 Web 服务器在 Windows 上运行任务的最佳方式

问题描述

我有一个用 Python 编写的任务,运行时间为 1-2 分钟,我想按需运行。请求将来自 Linux 上的 Django 服务器的非常小的数量。返回将是一个文件。

通常,我会使用像 Celery 这样的队列系统。但是,此任务只能在 Windows 上运行。

实现这一目标的最佳方法是什么?

通过建立 SSH 会话远程执行任务?还在使用 Celery,通过很多变通方法让它在 Windows 上工作(看起来很乱)?

标签: pythondjangolinuxwindowspython-3.x

解决方案


我可以想到 5 个不需要 ssh 的解决方案

我没有在我的解决方案中谈论身份验证,您应该根据选择的解决方案实现某些东西

解决方案1:

  • 为 windows 服务器编写一个简单的烧瓶/django 应用程序,它运行任务并返回响应
  • 在您的 linux 服务器中向 windows 发送请求并获取数据
  • linux 服务器可以使用 celery 进行此调用,因此您无需等待 2/3 分钟

解决方案2:

  • 为 Windows 服务器编写一个简单的烧瓶/django 应用程序,它在后台调用 celery 任务
    • 这个应用程序应该返回结果文件的 url
  • celery 任务创建一个包含结果的文件
  • 使用 nginx 提供此文件(或基于 windows 的静态文件服务器,我不知道 windows)
  • 从 linux 服务器向 windows 发送请求以获取结果(如果文件不存在,则表示结果尚未准备好)

解决方案3:

  • 为 Windows 服务器编写一个简单的烧瓶/django 应用程序,它在后台调用 celery 任务
    • 这个应用程序为给定的请求返回一个随机 id
  • 从您的 linux 服务器向具有任务 ID 的 Windows 应用程序发送请求
  • 当任务完成时 Windows 应用程序返回结果

解决方案4:

  • 为 Windows 服务器编写一个简单的烧瓶/django 应用程序,它在后台调用 celery 任务
  • 将端点添加到您的 linux django 应用程序以上传数据
  • 当 Windows 应用程序完成处理时,它会将数据上传到 linux django 应用程序

解决方案 5:

  • 解决方案 4,但您的 linux django 应用程序不适用于上传数据。它只设置一个布尔值,表示任务已完成
  • 如果任务完成linux服务器向winsows服务器发送请求以获取数据(此请求包含任务ID)

推荐阅读