python无限循环附加在multiprocessing.manger列表中

时间:2017-04-08 10:41:06

标签: python performance python-multiprocessing

为什么此代码无效

from multiprocessing import Process, Manager
import pcap, string, sys


def f(a, p):
    try:
        while True:
            a.append(p.next())
    except KeyboardInterrupt:
        print 'stop'


def g(a):
    # print a
    while True:
        print a[len(a)-1]


if __name__ == '__main__':
    # num = Value('d', 0.0)
    manager = Manager()
    l = manager.list([])
    p = pcap.pcapObject()
    dev = sys.argv[1]
    p.open_live(dev, 65000, 0, 100)
    p.setfilter(string.join(sys.argv[2:], ' '), 0, 0)

    p = Process(target=f, args=(l, p))
    p.start()
    p.join()

    a = Process(target=g, args=(l,))
    a.start()
    a.join()

    # print l
    # print len(l)

,但代码下方工作正常:

from multiprocessing import Process, Manager
import pcap, string, sys


def f(a, p):
    try:
        while len(a) < 100:
            a.append(p.next())
    except KeyboardInterrupt:
        print 'stop'


def g(a):
    # print a
    while True:
        print a[len(a)-1]


if __name__ == '__main__':
    # num = Value('d', 0.0)
    manager = Manager()
    l = manager.list([])
    p = pcap.pcapObject()
    dev = sys.argv[1]
    p.open_live(dev, 65000, 0, 100)
    p.setfilter(string.join(sys.argv[2:], ' '), 0, 0)

    p = Process(target=f, args=(l, p))
    p.start()
    p.join()

    a = Process(target=g, args=(l,))
    a.start()
    a.join()

    # print l
    # print len(l)

其他问题:

  • 这是创建共享的最佳,最快/最优化的方式吗? 不同进程之间的内存?
  • 是针对有限大小数据结构的multiprocessing.manager类。如果 不,我做错了什么?

任何帮助/提示将不胜感激。提前完成。

0 个答案:

没有答案