正在绘制队列中的数据

问题描述

我正在尝试运行两个进程——一个通过 Queue() 传递数据,另一个读取队列并同时绘制它。代码工作没有错误,只是情节没有显示。两个过程都完成后只出现空图。

我希望任何人都可以在我的代码中找到问题。提前致谢!

import multiprocessing as mp
import random
from matplotlib import pyplot as plt
import time

fig = plt.figure(figsize = (5,5))

def worker():
    for i in range(20):
        q.put(random.random())
        t.put(random.random())
        # time.sleep(0.01)
        
    
def plotter(q,t):
    while not q.empty():
        x = q.get()
        y = t.get()
        
        print(x,y)
        plt.scatter(x,y)
        # plt.show()
        time.sleep((0.1))

    
if __name__ == '__main__':
    q = mp.Queue()
    t = mp.Queue()
    r = mp.Process(target = plotter,args = (q,t))
    p = mp.Process(target = worker)
    p.start()
    r.start()
    p.join()
    r.join() 

解决方法

我通过更改绘图仪方法使其运行,如下所示:

def plotter(q,t):
    plt.figure(figsize=(5,5))
    while not q.empty():
        x = q.get()
        y = t.get()

        print(x,y)
        plt.scatter(x,y)
        time.sleep((0.1))
    plt.show()

我将 plt.figure 移到方法中,因为它没有在进程之间共享。它只在主进程中执行,而不是r

在第一次运行时,我不得不在进程开始之间放置一个 time.sleep()。否则队列中没有任何内容,plotter 立即完成。

当然,将 plt.show() 放在循环之外。