簡體   English   中英

python zerorpc 客戶端與多進程發送日志到服務器

[英]python zerorpc client with multiprocess to send log to server

作為標題,我想要一個日志rpc服務器來幫助我處理新進程中的日志。

我參考 zerorpc 和這個鏈接: https://stackoverflow.com/a/57140017/14021161

但陷入了一個奇怪的錯誤

編碼:

import zerorpc
from loguru import logger
import time
import multiprocessing as mp
import collections

Job = collections.namedtuple('Job', ['event', 'args'])

class LogClient(mp.Process):
    """A process backed by an internal queue for simple one-way message passing.
    """
    def __init__(self, ip='127.0.0.1', port='4242'):
        super().__init__()
        self.queue = mp.Queue()
        self.c = zerorpc.Client()
        address = f"tcp://{ip}:{port}"
        self.c.connect(address)
        self.start()

    def put(self, event, *args):
        """Puts the event and args as a `Job` on the queue
        """
        job = Job(event, args)
        self.queue.put(job)

    def _addLog(self, job):
        event, args = job
        self.c.addLog(*args)

    def run(self):
        while True:
            job = self.queue.get()
            self._addLog(job)

    def addLog(self, level, *context):
        self.put('addLog', level, *context)
    


lc = LogClient()
lc.c.addLog("WARNING", 'hello', 'Ray')  # this work, but its witout multiprocess
lc.addLog("INFO", 'hello', 'Ray')  # doesn't work 
lc.terminate()

_addLog確實收到了作業,但並沒有真正將其發送到服務器

任何建議將不勝感激。 提前致謝。

|

|


ps 為了讓問題更清楚,我只顯示了addLog ,但實際上服務器應該處理許多 IO 作業。 所以_addLog func 會變成一個帶有 gettattr 的dispatch func 來解析 server 中的所有函數

我發現zerorpc會出現這個問題。

在嘗試了快速但針對我的輕型項目的許多細節的 grpc 之后...

我最終使用帶有 PUSH-PULL 模式的純 zeromq。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM