Python 客户端启动独立进程而不阻塞客户端/服务器通信的最佳方式

Python 客户端启动独立进程而不阻塞客户端/服务器通信的最佳方式,python,twisted,Python,Twisted,我试图实现的最终结果是允许服务器在建立连接时将特定任务分配给客户端。简化版是这样的 客户端连接到服务器 服务器告诉客户端运行一些网络任务 客户端接收任务并启动另一个进程以完成任务 客户端告诉服务器它已启动 服务器告诉客户端它还有另一个任务要做(等等…) 几张便条 一个客户可以完成多少任务是有上限的 客户机需要能够监视任务/流程(正在运行?死机?) 如果客户端能够从进程接收数据并在需要时发送到服务器,那就太好了 起初,我打算尝试线程化,但我听说python没有正确地执行线程化(这是对的还是错的

我试图实现的最终结果是允许服务器在建立连接时将特定任务分配给客户端。简化版是这样的

  • 客户端连接到服务器
  • 服务器告诉客户端运行一些网络任务
  • 客户端接收任务并启动另一个进程以完成任务
  • 客户端告诉服务器它已启动
  • 服务器告诉客户端它还有另一个任务要做(等等…)
  • 几张便条

    • 一个客户可以完成多少任务是有上限的
    • 客户机需要能够监视任务/流程(正在运行?死机?)
    • 如果客户端能够从进程接收数据并在需要时发送到服务器,那就太好了
    起初,我打算尝试线程化,但我听说python没有正确地执行线程化(这是对的还是错的?)

    然后,它被认为是从python触发一个系统调用并记录PID。然后向其发送特定的状态、停止信号(SIGUSR1、SIGUSR2、SIGINT)。但不确定这是否有效,因为我不知道是否可以从另一个进程捕获数据。如果可以的话,我一点也不知道这将如何实现。(标准输出或套接字文件?)

    关于处理此问题的最佳方法,你们有什么建议?

    使用Python分布式任务队列。它可能做你想做的一切,或者可以让它做你想做的一切,它还将处理大量你可能还没有考虑过的边缘情况(如果服务器崩溃,现有作业会发生什么情况,等等)

    您可以使用RabbitMQ之类的消息队列从其他软件与芹菜通信;有关详细信息,请参阅芹菜教程

    使用诸如MySQL或PostgreSQL之类的数据库来存储任务及其结果的信息可能是最方便的,但是如果您愿意,您可以设计一个不使用数据库的解决方案。

    使用Python分布式任务队列。它可能做你想做的一切,或者可以让它做你想做的一切,它还将处理大量你可能还没有考虑过的边缘情况(如果服务器崩溃,现有作业会发生什么情况,等等)

    您可以使用RabbitMQ之类的消息队列从其他软件与芹菜通信;有关详细信息,请参阅芹菜教程


    使用诸如MySQL或PostgreSQL之类的数据库来存储有关任务及其结果的信息可能是最方便的,但是如果您愿意,您可以设计一个不使用数据库的解决方案。

    用于生成子流程。如果您已经在使用Twisted,那么它应该可以无缝地集成到您现有的协议逻辑中。

    用于生成子流程。如果您已经在使用Twisted,那么它应该可以无缝地集成到您现有的协议逻辑中。

    我完全忘记了这一点!谢谢,这可能正是我所需要的。虽然我将使用数据库来存储有关任务的信息,但我正在尝试为这样的情况制定计划,即客户机会启动无法访问数据库的进程,因此有必要向有权访问数据库的人报告。您可以使用嵌入到客户机应用程序中的sqlite,或者从你的服务器上公开一个RESTAPI我完全忘记了这一点!谢谢,这可能正是我所需要的。虽然我将使用数据库来存储有关任务的信息,但我正在尝试为这样的情况制定计划,即客户机会启动无法访问数据库的进程,因此有必要向有权访问数据库的人报告。您可以使用嵌入到客户机应用程序中的sqlite,或者从服务器公开RESTAPI