在Python中,我实现了两种类型的队列读取
不同之处:
- 在主进程中创建并执行队列
- 队列在主进程中创建,并由其他进程执行.
但是有一个性能差异,我试着调试它,但我看不出为什么!
代码: Queue1.py
import multiprocessing
import time
import cProfile, pstats, io
def put_queue(queue):
for i in range(500000):
queue.put(i)
def get_queue(queue):
pr = cProfile.Profile()
pr.enable()
print(queue.qsize())
while queue.qsize() > 0:
try:
queue.get(block=False)
except:
pass
pr.dump_stats("queue1.prof")
pr.disable()
s = io.StringIO()
sortby = "cumtime"
ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
ps.print_stats()
print(s.getvalue())
q1 = multiprocessing.Queue()
t1 = time.time()
put_queue(q1)
t2 = time.time()
print(t2-t1)
t1 = time.time()
p1 = multiprocessing.Process(target=get_queue, args=(q1,))
p1.start()
p1.join()
t2 = time.time()
print(t2-t1)
Queue2.py
import multiprocessing
import time
import cProfile, pstats, io
def put_queue(queue):
for i in range(500000):
queue.put(i)
def get_queue(queue):
pr = cProfile.Profile()
pr.enable()
print(queue.qsize())
while queue.qsize() > 0:
try:
queue.get(block=False)
except:
pass
pr.dump_stats("queue2.prof")
pr.disable()
s = io.StringIO()
sortby = "cumtime"
ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
ps.print_stats()
print(s.getvalue())
q2 = multiprocessing.Queue()
t1 = time.time()
put_queue(q2)
t2 = time.time()
print(t2 - t1)
t1 = time.time()
get_queue(q2)
t2 = time.time()
print(t2 - t1)
python Queue2.py
takes longer than queue1.py
我还会打印个人资料. enter image description here个
Queue2.py
cost muth time in built-in method posix.read
.
我想知道确切的原因.