RPC mit Standard-Python 3-Modulen

Inhaltsverzeichnis

Es gibt heute in Python zu viele Arten von RPCs

Ab 2020 wurden viele RPCs als OSS veröffentlicht, aber es gibt zu viele Typen, und die damit einhergehende Erhöhung der Auswahlkosten, die Erhöhung der Bewertungskosten und die Erhöhung der Lernkosten sind persönliche Probleme. Ich fühle, dass.

Da Zeit für die Arbeit als Mitglied der Gesellschaft kostbar ist, studiere ich Bibliotheken, die nacheinander angezeigt werden, und lerne, wie man sie verwendet, wenn PoC schnell ausgeführt wird oder wenn APIs usw. geschlossen werden. Es ist nicht angemessen, ein gutes Produkt herzustellen.

In Python existiert die "Manager" -Klasse in "Multiprocessing", und ein leistungsstarker Remote Procudure Call kann implementiert werden, indem die prozessübergreifende Kommunikation während der Multiprocessing-Funktion über das Netzwerk ausgeführt wird.

Remote Procudure Call (RPC) ist ein weiterer Computer im Netzwerk, der eine Verarbeitung aufruft oder verarbeitet, um eine verteilte Verarbeitung in großem Maßstab durchzuführen. Praktisch.

Wert, der mit Standardbibliotheken ausgeführt werden kann

Ich habe viele Bibliotheken verwendet, aber die Betreuer dieser Bibliotheken sind weg, ich habe kein System zum Akzeptieren von Pull-Anfragen oder ich habe keine Zeit. Viele der Bibliotheken, die "gut" zu sein schienen, wurden in der Vergangenheit zurückgelassen.

Wenn möglich, bibliotheksunabhängig und einfach zu implementieren, kann es verwendet werden, solange Python existiert (oder in Python nicht veraltet ist).

Codebeschreibung

Es ist ein Element, das in "Server" und "Client" unterteilt werden kann, wobei "Server" auf eine Anweisung wartet und "Client" eine Anweisung ausgibt.

server

from multiprocessing.managers import BaseManager as Manager
import os

#Angenommen, In-Memory-KVS
obj = {}
def get(k):
    print('get', k)
    return obj.get(k)

def put(k, v):
    obj[k] = v
    print('put', k,v)

#Server nicht benennen(Funktionen, die Linux und MacOS verstehen)
def get_uname():
    print('get_uname')
    return str(os.uname())

if __name__ == "__main__":
    port_num = 4343
    Manager.register("get", get) #Registrieren Sie die für den Standby verwendete Funktion
    Manager.register("put", put)
    Manager.register("get_uname", get_uname)
    manager = Manager(("", port_num), authkey=b"password") #Anweisungen können von überall akzeptiert werden, indem der Hostname leer gelassen wird. Passwort kann eingestellt werden
    manager.start()
    input("Press any key to kill server".center(50, "-")) #Geben Sie etwas ein und beenden Sie
    manager.shutdown()

client

from multiprocessing.managers import BaseManager as Manager
Manager.register("get") #Registerfunktion
Manager.register("put")
Manager.register("get_uname")

if __name__ == "__main__":
    port_num = 4343

    manager = Manager(address=('25.48.219.74', port_num), authkey=b"password")
    manager.connect()
    print('get', manager.get('a')) #Keiner sollte zurück sein
    print('put', manager.put('a', 10)) # a ->Set 10
    print('get', manager.get('a').conjugate()) #10 sollte zurück sein, (Rufen Sie für primitiven Typ usw. den Wert mit der konjugierten Funktion ab)
    print('get_uname', manager.get_uname()) #Ich verwende den Client unter MacOS, aber Linux auf dem Server sollte zurückkehren

Versuchen Sie es tatsächlich zu bewegen

Ich habe das obige Programm von Linux (Ubuntu) für Server, MacOS (Darwin) für Client und von einem Supermarktcafé auf meinen Heim-PC ausgeführt.

Das Ergebnis war wie erwartet und ich konnte es willkürlich zum Laufen bringen.

Auf diese Weise können Sie beispielsweise die Anzahl der YouTube-Aufrufe, Trend-Keywords von Twitter usw. verarbeiten und effizient datieren, ohne BigQuery, RedShift usw. häufig ausführen zu müssen. Sie können die Daten aggregieren.

Es ist wichtig, großartige neue Tools zu erlernen, aber es ist auch wichtig, die vorhandenen Tools klein zu halten, und die Gesamtkosten für das Erreichen der gewünschten Ziele sind sehr niedrig. Daher ist diese Person auf jeden Fall willkommen. Ich würde es begrüßen, wenn Sie das Gesetz berücksichtigen könnten.

Bonus: YouTube-Zuschauerzählcode

Ich gabelte den Client und versuchte es unter der Annahme, dass mehrere Personen Zugriff hatten.

cleint

from concurrent.futures import ProcessPoolExecutor
import random
from multiprocessing.managers import BaseManager as Manager
Manager.register("get")  #Registerfunktion
Manager.register("inc")

def extract(x):
    if hasattr(x, 'conjugate'):
        return x.conjugate()
    else:
        return x


def hikakin_watch(num):
    port_num = 4343
    manager = Manager(address=('127.0.0.1', port_num), authkey=b"password")
    manager.connect()
    for i in range(1000):
        try:
            now = extract(manager.get('hikakin'))
            print(now)
            manager.inc('hikakin')
        except Exception as exc:
            print(exc)

if __name__ == "__main__":
    with ProcessPoolExecutor(max_workers=5) as exe:
        exe.map(hikakin_watch, list(range(5)))
    
    port_num = 4343
    manager = Manager(address=('127.0.0.1', port_num), authkey=b"password")
    manager.connect()
    now = extract(manager.get('hikakin'))
    print(now)

server

from multiprocessing.managers import BaseManager as Manager
import os

#Angenommen, In-Memory-KVS
obj = {}
def get(k):
    if k not in obj:
        obj[k] = 0
    return obj.get(k)

def inc(k):
    obj[k] += 1

if __name__ == "__main__":
    port_num = 4343
    Manager.register("get", get) #Registrieren Sie die für den Standby verwendete Funktion
    Manager.register("inc", inc)
    manager = Manager(("", port_num), authkey=b"password") #Anweisungen können von überall akzeptiert werden, indem der Hostname leer gelassen wird. Passwort kann eingestellt werden
    manager.start()
    input("Press any key to kill server".center(50, "-")) #Geben Sie etwas ein und beenden Sie
    manager.shutdown()

Die erwartete Ausgabe betrug 5000, und es wurde festgestellt, dass die exklusive Steuerung auch für den parallelen Zugriff ordnungsgemäß durchgeführt werden kann.

Es scheint, dass es zum Zählen der Anzahl der Aufrufe auf YouTube verwendet werden kann.

Recommended Posts

RPC mit Standard-Python 3-Modulen
Matrixdarstellung mit Python-Standardeingabe
Beachten Sie den Python-Codierungsstandard PEP8
Berechnen Sie das Standardgewicht und zeigen Sie es mit Python an
Python-Modul mit "- (Bindestrich)" kann nicht gelöscht werden
UnicodeEncodeError hat Probleme mit der Standardausgabe von Python3
FizzBuzz in Python3
Scraping mit Python
Statistik mit Python
Scraping mit Python
Python mit Go
[Python] Standardeingabe
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
mit Syntax (Python)
Zundokokiyoshi mit Python
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
MessagePack-Versuchen Sie, Java und Python mit RPC zu verbinden
Lesen Sie WAV-Dateien nur mit dem Python-Standardpaket
Serielle Kommunikation mit Python
Zip, entpacken mit Python
Django 1.11 wurde mit Python3.6 gestartet
Primzahlbeurteilung mit Python
Python mit Eclipse + PyDev.
Socket-Kommunikation mit Python
Datenanalyse mit Python 2
Liste der Python-Module
Scraping in Python (Vorbereitung)
Python lernen mit ChemTHEATER 03
Sequentielle Suche mit Python
Führen Sie Python mit VBA aus
Umgang mit Yaml mit Python
Löse AtCoder 167 mit Python
Serielle Kommunikation mit Python
[Python] Verwenden Sie JSON mit Python
Python lernen mit ChemTHEATER 05-1
Lerne Python mit ChemTHEATER
Führen Sie prepDE.py mit python3 aus
1.1 Erste Schritte mit Python
Tweets mit Python sammeln
Binarisierung mit OpenCV / Python
3. 3. KI-Programmierung mit Python
Kernel-Methode mit Python
Nicht blockierend mit Python + uWSGI
Scraping mit Python + PhantomJS
Python-Pakete und -Module
Tweets mit Python posten
Verwenden Sie Mecab mit Python 3
[Python] Mit CGIHTTPServer umleiten
Holen Sie sich die Standardausgabe in Echtzeit mit dem Python-Unterprozess
Kinesis mit Python betreiben
Erste Schritte mit Python
Verwenden Sie DynamoDB mit Python
Zundko Getter mit Python
Behandle Excel mit Python