获得工出队列慢比单进程多进程

问题描述 投票:0回答:1

所以,我有以下代码

import time
from multiprocessing import Process
from multiprocessing import JoinableQueue as Queue

def checker(q):
    while True:
        data = q.get()
        if data is None:
            return

if __name__ == '__main__':
    t = time.time()
    q = Queue()

    for i in range(500000):
        q.put(i)
    procs = []
    for _ in range(4):
        q.put(None)
        p = Process(target=checker, args=(q,), daemon=True)
        # p = Thread(target=checker, args=(q,))
        p.start()
        procs.append(p)

    for p in procs:
        p.join()

    print(time.time() - t)

当我在平行4个的进程中运行该程序,它需要大约4.14秒来完成,并且当它与只是一个单一的过程运行它需要大约3.7秒。

同样的事情发生多线程同时运行。

我对这种行为可能的解释是,由于queuesmultithreadingmultiprocessing安全,并内置互斥的实现,只有一个threadprocess可以同时访问队列。

因此,与单个进程/线程,没有抢占到由python解释或CPU来完成,以确保每一个线程/进程得到平等的机会来运行他们的代码,但多进程/线程这个抢占的成本增加了整体运行程序的时间。

所以我想在正确的路线或者是因为别的什么这种情况的发生。

python multithreading multiprocessing python-multiprocessing python-multithreading
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.