/ / Start gleichzeitig Prozesse python3 - Python, Multithreading, Python-3.x, Multiprocessing

Beginne gleichzeitig python3 - python, multithreading, python-3.x, multiprocessing

Ich versuche ein Produzenten-Consumer-Design zu simulierenin Python 3 Multiprocessing. Das Hauptproblem ist, dass der Hersteller startet, der Verbraucher jedoch nicht startet, bis der Hersteller fertig ist (in diesem Szenario startet der Verbraucher nicht, weil der Hersteller niemals endet).

Hier ist der Code:

#!/usr/bin/python3

from scapy.all import *
from queue import Queue
from multiprocessing import Process

queue = Queue()

class Producer(Process):
def run(self):
global queue
print("Starting producer thread")
sniff(iface="wlan1mon", store=0, prn=pkt_callback)

def pkt_callback(pkt):
queue.put(pkt)
print(queue.qsize())

class Consumer(Process):
def run(self):
global queue
while True:
pkt = queue.get()
queue.task_done()
if pkt.haslayer(Dot11):
print("**Packet with Dot11 layer has been processed")
else:
print("--Packet without Dot11 layer has been processed")



if __name__ == "__main__":
Producer().start()
Consumer().start()

Ich weiß nicht, was in meinem Code falsch ist. Ich teste es mit Multithreading und es funktioniert, also denke ich, es gibt etwas, was ich missverstanden habe.

Vielen Dank.

Antworten:

1 für die Antwort № 1

Ich bin nicht sicher, ob Ihre Warteschlange ein Shared Memory - Objekt ist. Ich denke, Ihr Produzent schreibt in eine Warteschlange in seinem Speicher und Ihr Verbraucher liest aus einer Warteschlange in seinem Speicher, aber sie haben nicht den gleichen Speicher, so dass sie nicht miteinander sprechen. Ich denke, Sie brauchen einen "Manager", der sich darum dreht. siehe die docs. https://docs.python.org/2/library/multiprocessing.html#sharing-state-between-processes

Oder verwenden Sie die Multiprocessing-Version einer Warteschlange. Nochmals aus den Dokumenten: https://docs.python.org/2/library/multiprocessing.html#exchanging-objects-between-processes