微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正在绘制队列中的数据

如何解决正在绘制队列中的数据

我正在尝试运行两个进程——一个通过 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() 放在循环之外。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。