【发布时间】:2018-06-27 02:15:26
【问题描述】:
我正在构建一个使用 Pyqt4/Pyqtgraph 作为 GUI 框架和 BLE 模块的 python 应用程序。 当前应用从BLE模块接收数据并实时显示。
我编写了一些基准代码来评估与将 BLE 模块移动到单独进程相关的开销。然而,结果却令人困惑。
在处理器之间使用管道的流数据比使用队列的线程之间的流数据更快。 我一直认为处理器内的通信速度更快。
发生了什么?
提前致谢。
这些是我使用的代码
两个进程与 Pipes 通信
from multiprocessing import Process, Pipe
def worker(q):
output_p, input_p = q
input_p.close()
for task_nbr in range(100000):
message = output_p.recv()
sys.exit(1)
def main():
output_p, input_p = Pipe()
Process(target=worker, args=((output_p,input_p),)).start()
b = [i for i in range(20)]
start_time = time.time()
for num in range(100000):
input_p.send(b)
end_time = time.time()
duration = end_time - start_time
msg_per_sec = 100000 / duration
print "Duration: %s" % duration
print "Messages Per Second: %s" % msg_per_sec
if __name__ == "__main__":
main()
两个线程与队列通信
from Queue import Queue
from threading import Thread
def worker(q):
for x in range(100000):
q.get("MESSAGE")
def main():
q = Queue()
t = Thread(target=worker,args=(q,))
t.start()
start_time = time.time()
b = [i for i in range(20)]
print b
for x in range(100000):
q.put(b)
end_time = time.time()
duration = end_time - start_time
msg_per_sec = 100000 / duration
print "Duration: %s" % duration
print "Messages Per Second: %s" % msg_per_sec
if __name__ == "__main__":
main()
【问题讨论】:
标签: python multithreading queue pipe