[PYTHON] Behandeln Sie Anfragen in einem separaten Prozess

Einführung

Ein weiteres persönliches Memo.

Da es wie ↓ aussieht, habe ich es geschrieben, weil ich den Prozess beim Warten auf den Empfang nach Anforderungsquelle und Nachrichtentyp trennen wollte.

Quellcode

main.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import procs


workers = {}
source = procs.Source()

try:
    while True:

        #Umfrage aus der Quelle
        data = source.poll()
        key = data['key']

        #Wird generiert, wenn dem Schlüssel kein Worker entspricht
        if key not in workers:
            workers[key] = procs.Worker()

        #Delegieren Sie die Verarbeitung an den Mitarbeiter
        workers[key].delegate(data)

finally:
    #
    source.terminate()
    [ w.terminate() for _,w in workers ]

procs.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import abc
import multiprocessing


class Proc(metaclass=abc.ABCMeta):
    
    def __init__(self):
        self._stop    = multiprocessing.Event()
        self._queue   = multiprocessing.SimpleQueue()
        self._process = multiprocessing.Process(target=self._run)
        self._process.start()

    def terminate(self):
        self._stop.set()
        self._process.join()
        self._process.terminate()

    def _run(self):
        while not self._stop.is_set():
            self._do()

    @abc.abstractmethod
    def _do(self, **kwargs):
        pass


class Source(Proc):
    
    def _do(self, **kwargs):
        #Nachrichten empfangen
        data = { 'key' : 'some-data' }
        self._queue.put(data)

    def poll(self):
        return self._queue.get()

        
class Worker(Proc):

    def _do(self, **kwargs):
        data = self._queue.get()
        #Verarbeiten Sie die empfangenen Daten

    def delegate(self, data):
        return self._queue.put(data)

Recommended Posts

Behandeln Sie Anfragen in einem separaten Prozess
Dämonisiere einen Python-Prozess
diktieren in diktieren Macht ein Diktat ein Diktat
Versuchen Sie, das Bild in einen separaten Thread zu laden (OpenCV-Python).
Verwenden Sie ujson in Anfragen
Markdown mit Python behandeln
Einfallsreichtum beim speichersparenden Umgang mit Daten mit Pandas
Verarbeiten Sie die Dateien im Ordner in der Reihenfolge mit dem Shell-Skript
Machen Sie einen Screenshot in Python
Behandeln Sie Konstanten in Django-Vorlagen
Erstellen Sie eine Funktion in Python
Behandeln Sie Umgebungsvariablen in Python
Erstellen Sie ein Lesezeichen in Python
Zeichne ein Herz in Python
Implementieren Sie den Gaußschen Prozess in Pyro
Behandeln Sie komplexe Zahlen in Python
Verarbeiten Sie den Inhalt der Datei der Reihe nach mit einem Shell-Skript
IQ Bot Custom Logic (Python): Optimieren Sie die Ersetzungsverarbeitung in einer Schleife
Über psd-tools, eine Bibliothek, die psd-Dateien in Python verarbeiten kann
IQ Bot Custom Logic (Python): Effizienter Ersetzungsprozess in einer Schleife
<Pandas> Umgang mit Zeitreihendaten in der Pivot-Tabelle