【发布时间】:2016-09-20 15:24:46
【问题描述】:
我正在开发一个服务器(守护进程)。
服务器有一个“工作线程”。工作线程运行命令队列。当队列为空时,工作线程会暂停(但不会退出,因为它应该在内存中保留某些状态)。要在内存中准确地保存一份状态副本,我需要一直运行一个(不是多个也不是零个)工作线程。
当客户端连接到 Unix 套接字并发送命令时,请求被添加到此队列的末尾。
命令发出后,加入到工作线程的命令队列中。将其添加到队列后,服务器会回复“OK”之类的内容。服务器收到命令和它“OK”回复之间不应该有很长时间的停顿。但是,在队列中运行命令可能需要一些时间。
工作线程的主要“工作”被分成小块(花费相对较少的时间)。在块之间,工作线程检查(“吃”并清空)队列并根据从队列中提取的数据继续工作。
如何在 Python 中实现这个服务器/守护进程?
【问题讨论】:
-
请问为什么需要单线程?如果您有一个线程可以监听来自套接字的消息并立即向客户端回复“ok”,那将会发生什么问题。然后,您将在侦听器和工作人员之间建立一个队列,并且侦听器只会将消息发送到该队列。它们将按到达的顺序进行处理,并且工作线程应该保留其“内存中的状态”,并且不会被任何其他线程或进程弄乱。
-
@Hannu 我坚持我需要单个 worker 线程。有另一个线程监听套接字是可以的。
-
不应该一个套接字监听线程和一个队列然后解决你的问题吗?您的套接字将始终接受新消息,它们会立即得到响应,工作人员会保留其状态,并且请求将按照到达的顺序进行处理?然后,您的工作人员可以根据需要从队列中“吃掉”任务。
-
@Hannu 感谢您的想法。我会研究它(也许明天)。您能否详细介绍一下您的想法?
标签: python sockets server daemon