所以,我有以下代码
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来完成,以确保每一个线程/进程得到平等的机会来运行他们的代码,但多进程/线程这个抢占的成本增加了整体运行程序的时间。
所以我想在正确的路线或者是因为别的什么这种情况的发生。