我正在尝试在Python 3多处理中模拟生产者-消费者设计。主要问题是生产者启动了,但是消费者直到生产者完成才开始(在这种情况下,消费者没有启动,因为生产者永不结束)。
这是代码:
#!/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()
我不知道我的代码有什么问题。我使用多线程对其进行了测试,并且它可以正常工作,所以我想我对多处理有误解。
谢谢。
最佳答案
我不确定您的队列是共享内存对象。我认为您的生产者正在向其内存中的队列写入数据,而您的使用者正在从其内存中的队列读取数据,但是它们不是同一内存,因此不会互相交谈。我认为您需要一个“经理”来包裹它。参见文档。 https://docs.python.org/2/library/multiprocessing.html#sharing-state-between-processes
或使用队列的多处理版本。再次来自文档:https://docs.python.org/2/library/multiprocessing.html#exchanging-objects-between-processes
关于python - 同时启动处理python3,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46854555/