我正在開發一個服務器(守護進程)。實現單線程服務器/守護進程(Python)
服務器有一個「工作者線程」。工作線程運行一系列命令。當隊列爲空時,工作線程暫停(但不會退出,因爲它應該保留內存中的某個狀態)。要在內存中擁有完全一個狀態的副本,我需要全部運行一個(不是幾個而不是零)工作線程。
當客戶端連接到Unix套接字併發送命令時,將請求添加到此隊列的末尾。
命令發出後,它被添加到工作線程的命令隊列中。將它添加到隊列後,服務器回覆「OK」之類的內容。服務器接收命令和「確定」回覆之間應該沒有很長的停頓時間。但是,在隊列中運行命令可能需要一些時間。
工作者線程的主要「工作」被拆分成小塊(佔用相對較少的時間)塊。在塊之間,工作線程檢查(「吃」和清空)隊列,並根據從隊列中提取的數據繼續工作。
如何在Python中實現這個服務器/守護進程?
請問爲什麼它需要成爲單線程? 如果您有一個線程可以偵聽來自套接字的消息並立即向客戶端回覆「ok」,那麼會發生什麼情況?然後您將在偵聽器和worker之間有一個隊列,並且偵聽器只會將消息發送到該隊列。它們將按照到達順序進行處理,並且工作線程應該保留其「內存中的狀態」並且不會被任何其他線程或進程混淆。 – Hannu
@Hannu我堅持我需要單**工**線程。爲了讓套接字偵聽有另一個線程是可以的。 – porton
套接字偵聽器線程和隊列不應該解決您的問題嗎? 你的套接字總是會接受新的消息,他們會立即作出迴應,工作人員會保存它的狀態,並按照他們到達的順序處理請求?您的工作人員可以根據需要從隊列中「吃」任務。 – Hannu