【问题标题】:python zerorpc client with multiprocess to send log to server具有多进程的python zerorpc客户端将日志发送到服务器
【发布时间】:2020-08-07 10:39:26
【问题描述】:

如题,我想要一个log rpc server来帮我处理新进程中的log。

我参考 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 确实收到了作业,但并没有真正将其发送到服务器

任何建议将不胜感激!提前致谢。

|

|


附言为了让问题更清楚,我只显示addLog,但实际上服务器应该处理许多IO作业。 所以_addLog func 会变成dispatch func 和gettattr 来解析服务器中的所有函数

【问题讨论】:

  • zerorpc 使用 gevent 来复用 I/O。 gevent 通过单线程上的 couroutines 提供异步操作。除此之外,zmq 不能很好地使用 forks(zmq 使用线程。用线程进行 forking 是不可能的)。我不会对此感到惊讶,因为 gevent 或 zmq 都处于死锁状态。看看gevent,看看能不能用它来代替multiprocess。

标签: python multiprocessing zeromq getattr zerorpc


【解决方案1】:

我发现 zerorpc 会出现这个问题。

在尝试了 grpc 之后,它速度很快,但针对我的轻量级项目有很多细节......

我最终使用带有 PUSH-PULL 模式的纯 zeromq。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    相关资源
    最近更新 更多