Heim Backend-Entwicklung Python-Tutorial Verwendung von Python Rabbitmq (2)

Verwendung von Python Rabbitmq (2)

Jan 17, 2017 pm 02:51 PM

Der vorherige Artikel stellte die Installation von Rabbitmq und die klassische Hallo-Welt vor! Beispiel. Hier erfahren Sie mehr über Arbeitswarteschlangen. Da es sich um eine Fortsetzung des vorherigen Artikels handelt, ist dieser Artikel möglicherweise schwer zu verstehen, wenn Sie den vorherigen Artikel nicht gelesen haben. Die Adresse des vorherigen Artikels lautet: So installieren Sie Rabbitmq und Python auf Ubuntu


Nachrichten können auch als Aufgaben verstanden werden, und der Absender der Nachricht kann als Aufgabenzuweiser verstanden werden und der Nachrichtenempfänger kann als Arbeiter verstanden werden. Wenn der Arbeiter eine Aufgabe empfängt und sie nicht abgeschlossen hat, sendet der Aufgabenzuteiler eine andere Aufgabe, sodass mehrere Arbeiter erforderlich sind, um diese Aufgaben gemeinsam zu erledigen werden Arbeitswarteschlangen genannt. Das Strukturdiagramm lautet wie folgt:

Verwendung von Python Rabbitmq (2)

rabbitmqs Python-Instanz-Arbeitswarteschlange


Vorbereitung


Verwenden Sie im Beispielprogramm new_task.py, um den Aufgabenzuteiler zu simulieren, und worker.py, um den Worker zu simulieren.


Ändern Sie send.py, um Informationen von Befehlszeilenparametern zu empfangen und zu senden.

import sys
message= ' '.join(sys.argv[1:])or "Hello World!"
channel.basic_publish(exchange='',
routing_key='hello',
body=message)
print " [x] Sent %r" % (message,)
Nach dem Login kopieren

Ändern Sie die Rückruffunktion von require.py.

import time
def callback(ch, method, properties, body):
print " [x] Received %r" % (body,)
time.sleep( body.count('.') )
print " [x] Done"
Nach dem Login kopieren

Öffnen Sie hier zwei Terminals, beide führen worker.py aus und befinden sich im Überwachungsstatus. Dies entspricht zwei Workern. Öffnen Sie das dritte Terminal, führen Sie new_task.py

$ python new_task.py First message.
$ python new_task.py Second message..
$ python new_task.py Third message...
$ python new_task.py Fourth message....
$ python new_task.py Fifth message.....
Nach dem Login kopieren

aus und beobachten Sie, dass worker.py 3 Aufgaben erhält:

$ python worker.py
[*] Waiting for messages. To exit press CTRL+C
[x] Received 'First message.'
[x] Received 'Third message...'
[x] Received 'Fifth message.....'
Nach dem Login kopieren

Ein anderer Arbeiter hat 2 Aufgaben erhalten:

$ python worker.py
[*] Waiting for messages. To exit press CTRL+C
[x] Received 'Second message..'
[x] Received 'Fourth message....'
Nach dem Login kopieren

Aus der oben genannten Sicht werden jedem Arbeiter nacheinander Aufgaben zugewiesen. Wenn also ein Arbeiter während der Bearbeitung einer Aufgabe stirbt, ist die Aufgabe nicht erledigt und sollte an andere Arbeiter übergeben werden. Daher sollte es einen Mechanismus geben, der Feedback gibt, wenn ein Mitarbeiter eine Aufgabe erledigt.

Nachrichtenbestätigung


Nachrichtenbestätigung erfolgt, wenn der Arbeiter die Aufgabe abschließt, sie wird an Rabbitmq zurückgemeldet. Ändern Sie die Rückruffunktion in worker.py:

def callback(ch, method, properties, body):
print " [x] Received %r" % (body,)
time.sleep(5)
print " [x] Done"
ch.basic_ack(delivery_tag= method.delivery_tag)
Nach dem Login kopieren


Halten Sie hier 5 Sekunden lang an, um das Beenden mit Strg+C zu erleichtern.

Sie können den Parameter no_ack=True auch entfernen oder auf False setzen.

channel.basic_consume(callback, queue='hello', no_ack=False)
Nach dem Login kopieren

Wenn Sie diesen Code ausführen, gehen die ausgeführten Aufgaben nicht verloren, auch wenn einer der Arbeiter mit Strg+C beendet wird und Rabbitmq die Aufgaben an andere Arbeiter neu verteilt.


Nachrichtenbeständigkeit (Nachrichtenbeständigkeit)


Obwohl es einen Nachrichten-Feedback-Mechanismus gibt, wenn Rabbitmq selbst hängt Lass es fallen, die Mission ist trotzdem verloren. Daher müssen Aufgaben dauerhaft gespeichert werden. Persistenten Speicher deklarieren:

channel.queue_declare(queue='hello', durable=True)
Nach dem Login kopieren

Aber dieses Programm führt einen Fehler aus, da die Hello-Warteschlange bereits vorhanden ist und die Verwendung anderer Parameter zum Neudefinieren vorhandener Warteschlangen nicht zulässt. Definieren Sie eine Warteschlange neu:

channel.queue_declare(queue='task_queue', durable=True)
Nach dem Login kopieren

Wenn Sie eine Aufgabe senden, verwenden Sie Delivery_mode=2, um die Aufgabe als dauerhaften Speicher zu markieren:


channel.basic_publish(exchange='',
routing_key="task_queue",
body=message,
properties=pika.BasicProperties(
delivery_mode= 2,# make message persistent
))
Nach dem Login kopieren

Fairer Versand


Im obigen Beispiel werden zwar jedem Arbeiter nacheinander Aufgaben zugewiesen, nicht jedoch jeder Aufgabe zwangsläufig das Gleiche. Einige Aufgaben können schwerer sein und eine längere Ausführungszeit in Anspruch nehmen; andere können leichter sein und eine kürzere Ausführungszeit in Anspruch nehmen. Es wäre am besten, wenn es fair geplant werden kann, um prefetch_count=1 zu setzen, damit Rabbitmq nicht mehrere Aufgaben gleichzeitig an Worker zuweist. Das heißt, erst nachdem der Worker die Aufgabe abgeschlossen hat, erhält es die Aufgabe erneut .

channel.basic_qos(prefetch_count=1)
Nach dem Login kopieren

new_task.py vollständiger Code

#!/usr/bin/env python
import pika
import sys
connection= pika.BlockingConnection(pika.ConnectionParameters(
host='localhost'))
channel= connection.channel()
channel.queue_declare(queue='task_queue', durable=True)
message= ' '.join(sys.argv[1:])or "Hello World!"
channel.basic_publish(exchange='',
routing_key='task_queue',
body=message,
properties=pika.BasicProperties(
delivery_mode= 2,# make message persistent
))
print " [x] Sent %r" % (message,)
connection.close()
Nach dem Login kopieren

worker.py vollständiger Code

#!/usr/bin/env python
import pika
import time
connection= pika.BlockingConnection(pika.ConnectionParameters(
host='localhost'))
channel= connection.channel()
channel.queue_declare(queue='task_queue', durable=True)
print ' [*] Waiting for messages. To exit press CTRL+C'
def callback(ch, method, properties, body):
print " [x] Received %r" % (body,)
time.sleep( body.count('.') )
print " [x] Done"
ch.basic_ack(delivery_tag= method.delivery_tag)
channel.basic_qos(prefetch_count=1)
channel.basic_consume(callback,
queue='task_queue')
channel.start_consuming()
Nach dem Login kopieren

Das Obige ist der Inhalt der Verwendung von Python Rabbitmq (2), Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Python vs. C: Anwendungen und Anwendungsfälle verglichen Python vs. C: Anwendungen und Anwendungsfälle verglichen Apr 12, 2025 am 12:01 AM

Python eignet sich für Datenwissenschafts-, Webentwicklungs- und Automatisierungsaufgaben, während C für Systemprogrammierung, Spieleentwicklung und eingebettete Systeme geeignet ist. Python ist bekannt für seine Einfachheit und sein starkes Ökosystem, während C für seine hohen Leistung und die zugrunde liegenden Kontrollfunktionen bekannt ist.

Welche Arten von Dateien bestehen aus Oracle -Datenbanken? Welche Arten von Dateien bestehen aus Oracle -Datenbanken? Apr 11, 2025 pm 03:03 PM

Die Struktur der Oracle -Datenbankdatei umfasst: Datendatei: Speichern tatsächlicher Daten. Steuerdatei: Datenbankstrukturinformationen aufzeichnen. Protokolldateien neu wieder aufnehmen: Aktenübertragungsvorgänge aufzeichnen, um die Datenkonsistenz sicherzustellen. Parameterdatei: Enthält Datenbank, die über Parameter ausgeführt werden, um die Leistung zu optimieren. Archivprotokolldatei: Backup -Wiederherstellung der Protokolldatei für die Katastrophenwiederherstellung.

So melden Sie sich in der Oracle -Datenbank an So melden Sie sich in der Oracle -Datenbank an Apr 11, 2025 pm 02:39 PM

Die Oracle -Datenbankanmeldung umfasst nicht nur Benutzername und Kennwort, sondern auch Verbindungszeichenfolgen (einschließlich Serverinformationen und Anmeldeinformationen) und Authentifizierungsmethoden. Es unterstützt SQL*Plus- und Programmiersprachanschlüsse und bietet Authentifizierungsoptionen wie Benutzername und Passwort, Kerberos und LDAP. Zu den häufigen Fehlern gehören Verbindungszeichenfolgenfehler und ungültige Benutzername/Passwörter, während sich Best Practices auf Verbindungspooling, parametrisierte Abfragen, Indizierung und Sicherheitsanmeldeinformationen konzentrieren.

So verwenden Sie Debian Apache -Protokolle, um die Website der Website zu verbessern So verwenden Sie Debian Apache -Protokolle, um die Website der Website zu verbessern Apr 12, 2025 pm 11:36 PM

In diesem Artikel wird erläutert, wie die Leistung der Website verbessert wird, indem Apache -Protokolle im Debian -System analysiert werden. 1. Log -Analyse -Basics Apache Protokoll Datensätze Die detaillierten Informationen aller HTTP -Anforderungen, einschließlich IP -Adresse, Zeitstempel, URL, HTTP -Methode und Antwortcode. In Debian -Systemen befinden sich diese Protokolle normalerweise in /var/log/apache2/access.log und /var/log/apache2/error.log verzeichnis. Das Verständnis der Protokollstruktur ist der erste Schritt in der effektiven Analyse. 2. Tool mit Protokollanalyse Mit einer Vielzahl von Tools können Apache -Protokolle analysiert: Befehlszeilen -Tools: GREP, AWK, SED und andere Befehlszeilen -Tools.

Python: Spiele, GUIs und mehr Python: Spiele, GUIs und mehr Apr 13, 2025 am 12:14 AM

Python zeichnet sich in Gaming und GUI -Entwicklung aus. 1) Spielentwicklung verwendet Pygame, die Zeichnungen, Audio- und andere Funktionen bereitstellt, die für die Erstellung von 2D -Spielen geeignet sind. 2) Die GUI -Entwicklung kann Tkinter oder Pyqt auswählen. Tkinter ist einfach und einfach zu bedienen. PYQT hat reichhaltige Funktionen und ist für die berufliche Entwicklung geeignet.

Was sind die Oracle -Datenbank auf der C -Festplatte? Was sind die Oracle -Datenbank auf der C -Festplatte? Apr 11, 2025 pm 04:21 PM

Der Versteckplatz der Oracle -Datenbank auf dem C -Laufwerk: Registrierung: Verwenden Sie den Registrierungseditor, um nach "Oracle" zu suchen, um Informationen einschließlich Installationspfad, Dienstname usw. zu finden Sorgfältige Aktion: Wenn Sie Oracle deinstallieren, müssen Sie nicht nur Dateien löschen, sondern auch die Registrierung und Dienste reinigen. Es wird empfohlen, das offizielle Deinstallieren -Tool zu verwenden oder professionelle Hilfe zu suchen. Space Management: Optimieren Sie den Speicherplatz, um die Installation von Oracle am C -Laufwerk zu vermeiden. Temporäre Dateien regelmäßig reinigen

Laravel (PHP) gegen Python: Entwicklungsumgebungen und Ökosysteme Laravel (PHP) gegen Python: Entwicklungsumgebungen und Ökosysteme Apr 12, 2025 am 12:10 AM

Der Vergleich zwischen Laravel und Python in der Entwicklungsumgebung und dem Ökosystem ist wie folgt: 1. Die Entwicklungsumgebung von Laravel ist einfach, nur PHP und Komponist sind erforderlich. Es bietet eine umfassende Auswahl an Erweiterungspaketen wie Laravelforge, aber die Wartung des Erweiterungspakets ist möglicherweise nicht rechtzeitig. 2. Die Entwicklungsumgebung von Python ist ebenfalls einfach, nur Python und PIP sind erforderlich. Das Ökosystem ist riesig und deckt mehrere Felder ab, aber das Versions- und Abhängigkeitsmanagement kann komplex sein.

PHP und Python: Vergleich von zwei beliebten Programmiersprachen PHP und Python: Vergleich von zwei beliebten Programmiersprachen Apr 14, 2025 am 12:13 AM

PHP und Python haben jeweils ihre eigenen Vorteile und wählen nach den Projektanforderungen. 1.PHP ist für die Webentwicklung geeignet, insbesondere für die schnelle Entwicklung und Wartung von Websites. 2. Python eignet sich für Datenwissenschaft, maschinelles Lernen und künstliche Intelligenz mit prägnanter Syntax und für Anfänger.

See all articles