python为什么这段代码给出一个“PicklingError:Can't pickle<type'function'>:attribute lookup\uu builtin_u9.function failed”错误?

2024-10-02 22:36:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我似乎找不到解决这个问题的方法。在

from scapy.all import *
from multiprocessing import Process, Queue
from threading import Lock

pkts = []    
lock = Lock()

def MyPrint(que):
    count = 0
    while 1:
        if que.qsize() == 0 :
            continue
        pkts.append(que.get())
        print '%d packet' % count
        print pkts[count].sprintf("Source:{IP:%IP.src%}:{TCP:%TCP.sport%} ===> Dest:{IP:%IP.dst%}:{TCP:%TCP.dport%}\n: {Raw:%Raw.load%}\n\n")
        count = count + 1

def CollectPacket(x, que):
    lock.acquire()
    que.put(x)
    lock.release()

def MySniffing(que):
    sniff(filter='ip host 172.20.64.12', prn=lambda x: CollectPacket(x, que))

def main():
    que = Queue()
    pr1 = Process(target=MySniffing, args=(que, ))
    pr2 = Process(target=MyPrint, args=(que,))

    pr1.start()
    pr2.start()

if __name__ == '__main__':
    main()

这将产生以下输出:

^{pr2}$

Tags: fromimportiplockqueuemaindefcount