代码之家  ›  专栏  ›  技术社区  ›  Rohit

使用多个进程比使用单个进程更慢地将工作人员移出队列

  •  0
  • Rohit  · 技术社区  · 6 年前

    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 秒。

    queues multithreading multiprocessing 安全且具有内置互斥实现,只有一个 thread process 可以一次访问队列。

    因此,对于单个进程/线程,没有可执行的抢占 python 解释器或CPU,以确保每个线程/进程都有平等的机会运行其代码,但多个进程/线程这种抢占的成本会增加程序的总体运行时间。

    1 回复  |  直到 6 年前
        1
  •  1
  •   deets    6 年前

    但试着在棋盘格中进行一些实际计算,表格将很快翻转。