python 中的多进程程序似乎在 运行 一段时间后变慢了

the multiprocess program in python seems get slowly after run for a while

我在 python 中编写了一个多处理程序。可以说明如下:

nodes = multiprocessing.Manager().list()

lock = multiprocess.Lock()
def get_elems(node):
    #get elements by send requests
def worker():
    lock.acquire()
    node = nodes.pop(0)
    lock.release()
    elems = get_elems(node)

    lock.acquire()
        for elem in elems:
            nodes.append(node)
    lock.release()
if __name__ == "__main__":
    node = {"name":"name", "group":0}
    nodes.append(node)
    processes = [None for i in xrange(10)]
    for i in xrange(10):
        processes[i] = multiprocessing.Process(target=worker)
        processes[i].start()
    for i in xrange(10):
        processes[i].join()

程序一开始运行,好像一切正​​常。 运行一段时间后。程序速度变慢。使用多线程时也存在这种现象。而且我看到Python里面有一个Global Interpreter Lock,所以我改成multiprocessing。但是还是有这种现象。完整代码在here中。我试过Cython,还是有这个现象。我的代码有问题吗?还是水货python先天缺陷?

我不确定这是真正的原因,但是,您是从一个越来越长的列表的开头弹出的。这太贵了。尝试使用 collections.deque.

更新:阅读链接代码。您应该使用队列,正如对此 post 和线程的评论中所建议的那样。 您使用队列消除了锁。 工作人员受 IO 限制,因此线程是合适的。