客户端在不阻止客户端/服务器通信的情况下触发单独进程的最佳方式

时间:2012-06-21 16:15:44

标签: python twisted

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

  1. 客户端连接到服务器
  2. 服务器告诉客户端运行某些网络任务
  3. 客户端接收任务并启动另一个流程以完成任务
  4. 客户端告诉服务器它已启动
  5. 服务器告诉客户端还有其他任务要做(等等......)
  6. 几个笔记

    • 客户可以执行的任务数量上限
    • 客户端需要能够监控任务/进程(正在运行?已死?)
    • 如果客户端可以从流程接收数据以便在需要时发送到服务器,那将是很好的

    起初,我打算尝试线程,但我听说python没有正确地进行线程化(是对还是错?)

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

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

2 个答案:

答案 0 :(得分:4)

使用spawnProcess生成子流程。如果您已经使用Twisted,那么这应该非常无缝地集成到您现有的协议逻辑中。

答案 1 :(得分:0)

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

您可以使用像RabbitMQ这样的消息队列从其他软件与Celery通信;有关详细信息,请参阅Celery教程。

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