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,以确保每个线程/进程都有平等的机会运行其代码,但多个进程/线程这种抢占的成本会增加程序的总体运行时间。