多处理显示 matplotlib 图

use*_*808 5 matplotlib multiprocessing python-3.x

我正在尝试打开多个图,但遇到了一些问题。当我尝试使用线程创建绘图时,python 首先会打开多个窗口,然后关闭除第一个窗口之外的所有窗口。

在另一个问题中,建议我使用我已经尝试过的多处理。代码运行没有错误,只是不显示任何情节。
在继续我的主要项目之前,我正在尝试做一些非常简单的事情。

# Import the necessary packages and modules
import matplotlib.pyplot as plt
import numpy as np


#from threading import Thread
import multiprocessing

def plot(datax, datay, name):
    # Prepare the data
    x = datax
    y = datay**2
    # Plot the data
    plt.scatter(x, y, label=name)

    # Add a legend
    plt.legend()

    # Show the plot
    plt.show()



#plot(3,3,)
'''
for i in range(10):
    t = Thread(target=plot, args=(i,i+1,i,))
    t.start()
    '''
for i in range(2):
    p = multiprocessing.Process(target=plot, args=(i, i, i))
    p.start()
Run Code Online (Sandbox Code Playgroud)

更新:由于某种原因,多处理再次停止工作。我尝试创建一个函数 multiP() 只是为了打开进程,但当我添加输入('value:')时它不起作用。我不知道如何将数据发送到特定线程,我将像这样保存数据: dat = [[x,y0,y1,...yn],[x,y0,y1,.. .yn],...] 并且每个绘图过程都会检查是否添加了某些内容到数据中。

# Import the necessary packages and modules
import matplotlib.pyplot as plt
import numpy as np


#from threading import Thread
import multiprocessing

def plot(datax, datay, name):
    # Prepare the data
    x = datax
    y = datay**2
    # Plot the data
    plt.scatter(x, y, label=name)

    # Add a legend
    plt.legend()

    # Show the plot
    plt.show()



#plot(3,3,)
'''
for i in range(10):
    t = Thread(target=plot, args=(i,i+1,i,))
    t.start()
    '''
for i in range(2):
    p = multiprocessing.Process(target=plot, args=(i, i, i))
    p.start()
Run Code Online (Sandbox Code Playgroud)

Imp*_*est 4

以下代码根据需要生成两个数字。

import matplotlib.pyplot as plt
import numpy as np

import multiprocessing
#multiprocessing.freeze_support() # <- may be required on windows

def plot(datax, datay, name):
    x = datax
    y = datay**2
    plt.scatter(x, y, label=name)
    plt.legend()
    plt.show()

def multiP():
    for i in range(2):
        p = multiprocessing.Process(target=plot, args=(i, i, i))
        p.start()

if __name__ == "__main__": 
    input('Value: ') 
    multiP()
Run Code Online (Sandbox Code Playgroud)