关于多线程:python中的多进程程序在运行一段时间之后似乎变得缓慢

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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中有一个全局解释器锁,所以我改为多处理。但还是有这种现象。完整的代码在这里。我试过赛通,还有这个现象。我的代码有问题吗?或者在python中是否存在并行的出生缺陷?


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

更新:读取链接的代码。您应该使用一个队列,如本文注释和线程中建议的那样。使用队列可以消除锁。工作线程是IO绑定的,因此线程是适当的。