python zerorp c клиент с мультипроцессом для отправки журнала на сервер - PullRequest
0 голосов
/ 05 августа 2020

В качестве заголовка я хочу, чтобы сервер журнала rp c помог мне работать с журналом в новом процессе.

Я ссылаюсь на zerorp c и эту ссылку: { ссылка }

Но застрял в странной ошибке

Код:

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, но на самом деле сервер должен обрабатывать много заданий ввода-вывода. Таким образом, _addLog fun c превратится в dispatch fun c с gettattr для анализа всех функций на сервере

1 Ответ

0 голосов
/ 07 августа 2020

Я обнаружил, что проблема возникает с zerorp c.

После попытки grp c, который быстр, но так много деталей против моего светового проекта ...

Я заканчиваю вверх, используя чистый zeromq с шаблоном PU SH -PULL.

...