Python Multiprocessing-wachtrij

Python Multiprocessing Wachtrij



Het meest cruciale element van de datastructuur is de wachtrij. De 'first in, first out' datastructuurwachtrij die de basis vormt voor Python-multiprocessing is vergelijkbaar. Wachtrijen worden geleverd aan de procesfunctie om het proces in staat te stellen de gegevens te verzamelen. Het eerste item dat uit de wachtrij wordt verwijderd, is het eerste item dat wordt ingevoerd. We gebruiken de methode 'put()' van de wachtrij om de gegevens aan de wachtrij toe te voegen en de methode 'get()' om de gegevens uit de wachtrij op te halen.

Voorbeeld 1: de Queue()-methode gebruiken om een ​​multiprocessing-wachtrij te maken in Python

In dit voorbeeld maken we een multiprocessing-wachtrij in Python met behulp van de 'queue()'-methode. Multiprocessing verwijst naar het gebruik van een of meer CPU's in een systeem om twee of meer processen tegelijkertijd uit te voeren. Multiprocessing, een geconstrueerde module in Python, vergemakkelijkt het schakelen tussen processen. We moeten bekend zijn met de proceseigenschap voordat we met multiprocessing gaan werken. We zijn ons ervan bewust dat de wachtrij een cruciaal onderdeel is van het datamodel. De standaard datawachtrij, die is gebaseerd op het 'First-In-First-Out'-idee, en Python-multiprocessing zijn exacte tegenhangers. Over het algemeen slaat de wachtrij het Python-object op en is deze cruciaal voor gegevensoverdracht tussen taken.







De tool 'spyder' wordt gebruikt om het aanwezige Python-script te implementeren, dus laten we gewoon aan de slag gaan. We moeten eerst de multiprocessing-module importeren omdat we het Python multiprocessing-script uitvoeren. We hebben dit gedaan door de multiprocessing-module te importeren als 'm'. Met behulp van de 'm.queue()'-techniek roepen we de multiprocessing 'queue()'-methode aan. Hier maken we een variabele met de naam 'queue' en plaatsen we de multiprocessing 'queue()'-methode erin. Aangezien we weten dat de wachtrij items opslaat in een 'first-in, first-out' volgorde, wordt het item dat we als eerste toevoegen eerst verwijderd. Nadat we de multiprocessing-wachtrij hebben gestart, noemen we de methode 'print()', waarbij we de instructie 'Er is een multiprocessing-wachtrij' doorgeven als argument om deze op het scherm weer te geven. Omdat we de geconstrueerde wachtrij in deze variabele opslaan, printen we de wachtrij door de variabele 'wachtrij' tussen haakjes van de methode 'print()' door te geven.




De volgende afbeelding laat zien dat de Python multiprocessing-wachtrij nu is opgebouwd. Het afdrukoverzicht wordt als eerste getoond. Nadat deze multiprocessing-wachtrij is opgebouwd in het toegewezen geheugenadres, kan deze worden gebruikt om de afzonderlijke gegevens over te dragen tussen twee of meer lopende processen.







Voorbeeld 2: de methode 'Qsize()' gebruiken om de grootte van de multiprocessing-wachtrij in Python te bepalen

We bepalen in dit geval de grootte van de multiprocessing-wachtrij. Om de grootte van de multiprocessing-wachtrij te berekenen, gebruiken we de methode 'qsize()'. De functie 'qsize()' retourneert de werkelijke grootte van de Python-multiprocessing-wachtrij. Met andere woorden, deze methode geeft het totale aantal items in een wachtrij.

Laten we beginnen met het importeren van de Python multiprocessing-module als 'm' voordat we de code uitvoeren. Vervolgens roepen we met behulp van de opdracht 'm.queue()' de multiprocessing-functie 'queue()' aan en plaatsen we het resultaat in de variabele 'Queue'. Vervolgens voegen we met behulp van de methode 'put()' de items toe aan de wachtrij in de volgende regel. Deze methode wordt gebruikt om de gegevens aan een wachtrij toe te voegen. Daarom noemen we 'Wachtrij' met de methode 'put()' en leveren we de gehele getallen als element tussen haakjes. De getallen die we toevoegen zijn '1', '2', '3', '4', '5', '6' en '7' met behulp van de 'put()'-functies.



Verder gebruiken we 'Queue' om de grootte van de multiprocessing-wachtrij te verkrijgen, we noemen de 'qsize()' met de multiprocessing-wachtrij. Vervolgens slaan we in de nieuw gevormde variabele 'result' de uitkomst van de methode 'qsize()' op. Daarna noemen we de methode 'print()' en geven we de instructie 'De grootte van de multiprocessing-wachtrij is' door als parameter. Vervolgens noemen we de variabele 'result' in de functie 'print()', aangezien de grootte in deze variabele wordt opgeslagen.


De uitvoerafbeelding heeft de weergegeven grootte. Aangezien we de functie 'put()' gebruiken om zeven elementen toe te voegen aan de multiprocessing-wachtrij en de functie 'qsize()' om de grootte te bepalen, wordt de grootte '7' van de multiprocessing-wachtrij weergegeven. De invoeropdracht 'de grootte van de multiprocessing-wachtrij' wordt vóór de grootte weergegeven.

Voorbeeld 3: de methode 'Put()' en 'Get()' gebruiken in de Python Multiprocessing-wachtrij

In dit voorbeeld worden de wachtrijmethoden 'put()' en 'get()' uit de Python multiprocessing-wachtrij gebruikt. In dit voorbeeld ontwikkelen we twee door de gebruiker gedefinieerde functies. In dit voorbeeld definiëren we een functie om een ​​proces te creëren dat '5' willekeurige gehele getallen produceert. We gebruiken ook de methode 'put()' om ze aan een wachtrij toe te voegen. De methode 'put()' wordt gebruikt om de items in de wachtrij te plaatsen. Om vervolgens de nummers uit de wachtrij op te halen en hun waarden te retourneren, schrijven we een andere functie en roepen deze op tijdens de procedure. We gebruiken de functie 'get()' om de nummers uit de wachtrij op te halen, aangezien deze methode wordt gebruikt om de gegevens uit de wachtrij op te halen die we invoegen met de methode 'put()'.

Laten we nu beginnen met het implementeren van de code. Eerst importeren we de vier bibliotheken waaruit dit script bestaat. We importeren eerst 'slaap' uit de tijdmodule om de uitvoering enige tijd uit te stellen, gemeten in seconden, gevolgd door 'willekeurig' uit de willekeurige module die wordt gebruikt om willekeurige getallen te genereren, en vervolgens 'verwerken' uit multiprocessing omdat deze code een proces creëert , en ten slotte de 'wachtrij' van multiprocessing. Door in eerste instantie een klasse-instantie te bouwen, kan de wachtrij worden gebruikt. Dit stelt standaard een oneindige wachtrij in of een wachtrij zonder maximale grootte. Door de optie maximale grootte in te stellen op een getal dat groter is dan nul, is het mogelijk om een ​​creatie te maken met een groottebeperking.


We definiëren een functie. Aangezien deze functie door de gebruiker is gedefinieerd, geven we deze de naam 'functie1' en geven we de term 'wachtrij' door als argument. Daarna roepen we de functie 'print()' aan en geven deze de instructies 'builder: Running', 'flush' en het object 'True' door. De printfunctie van Python heeft een unieke optie, flush genaamd, waarmee de gebruiker kan kiezen of hij deze uitvoer al dan niet wil bufferen. De volgende stap is het genereren van de taak. Om dit te doen, gebruiken we 'voor' en maken we de variabele 'm' en stellen we het bereik in op '5'. Gebruik vervolgens in de volgende regel 'random()' en sla het resultaat op in de variabele die we hebben gemaakt, namelijk 'waarde'. Dit geeft aan dat de functie nu zijn vijf iteraties voltooit, waarbij elke iteratie een willekeurig geheel getal van 0 tot 5 creëert.

Vervolgens roepen we in de volgende stap de functie 'sleep()' aan en geven we het argument 'waarde' door om het gedeelte een bepaald aantal seconden te vertragen. Vervolgens noemen we de 'wachtrij' met de methode 'put()' om de waarde in wezen aan de wachtrij toe te voegen. De gebruiker wordt dan geïnformeerd dat er geen werk meer is door de methode 'queue.put()' nogmaals aan te roepen en de waarde 'None' door te geven. Vervolgens voeren we de methode 'print()' uit, geven de instructie 'builder: ready' door samen met 'flush' en stellen deze in op 'True'.


We definiëren nu een tweede functie, 'functie2', en kennen er het sleutelwoord 'wachtrij' aan toe als argument. Vervolgens noemen we de functie 'print()' terwijl we de rapportstatussen 'User: Running' en 'flush' doorgeven, die is ingesteld op 'True'. We starten de werking van 'function2' met behulp van de while true-voorwaarde om de gegevens uit de wachtrij te halen en in de nieuw gemaakte 'item' -variabele te plaatsen. Vervolgens gebruiken we de voorwaarde 'als', 'item is geen', om de lus te onderbreken als de voorwaarde waar is. Als er geen item beschikbaar is, stopt het en vraagt ​​de gebruiker er een. De taak stopt de lus en eindigt in dit geval als het item dat uit de waarde wordt verkregen null is. Vervolgens roepen we in de volgende stap de functie 'print()' aan en leveren we het rapport 'User: ready' en de parameters 'flush=True'.


Vervolgens gaan we het hoofdproces in met behulp van de 'If-name = main_'. We maken een wachtrij door de methode 'queue()' aan te roepen en op te slaan in de variabele 'wachtrij'. Vervolgens creëren we een proces door de gebruikersfunctie 'functie2' aan te roepen. Hiervoor noemen we de klasse 'proces'. Daarin geven we de 'target=function2' door om de functie in het proces aan te roepen, het argument 'wachtrij' door te geven en het op te slaan in de variabele 'User_process'. Het proces begint dan door de methode 'start()' aan te roepen met de variabele 'User_proces'. Vervolgens herhalen we dezelfde procedure om de 'functie1' in het proces aan te roepen en in de variabele 'builder process' te plaatsen. Vervolgens roepen we de processen aan met de methode 'join()' om te wachten op de uitvoering.


Nu het wordt gepresenteerd, kunt u de instructies van beide functies in de uitvoer zien. Het geeft de items weer die we hebben toegevoegd met behulp van de 'put()' en 'get()' door respectievelijk de 'get()' methoden te gebruiken.

Conclusie

We leerden over de multiprocessing-wachtrij van Python in dit artikel. We hebben de gegeven illustraties gebruikt. Eerst hebben we beschreven hoe u een wachtrij kunt maken in Python multiprocessing met behulp van de wachtrij()-functie. Vervolgens hebben we de methode 'qsize()' gebruikt om het . We hebben ook de methoden put() en get() van de wachtrij gebruikt. In het laatste voorbeeld kwamen de slaapklasse van de tijdmodule en de willekeurige klasse van de willekeurige module beide aan de orde.