我正在尝试在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/

10-16 18:45