2

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

  1. 客户端连接到服务器
  2. 服务器告诉客户端运行一些网络任务
  3. 客户端收到任务并启动另一个进程来完成任务
  4. 客户端告诉服务器它已经启动
  5. 服务器告诉客户端它有另一个任务要做(等等......)

一些笔记

  • 客户可以完成的任务数量会有上限
  • 客户端需要能够监控任务/进程(运行?死了?)
  • 如果客户端可以从进程接收数据并在需要时发送到服务器,那就太好了

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

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

就处理这个问题的最佳方法而言,你们会提出什么建议?

4

2 回答 2

4

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

于 2012-06-21T17:46:53.950 回答
0

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

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

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

于 2012-06-21T16:19:55.627 回答