从Python中其他进程中运行的函数调用类方法

从Python中其他进程中运行的函数调用类方法,python,ipc,python-multiprocessing,Python,Ipc,Python Multiprocessing,我有一个主图形用户界面来接收来自放大器的数据并绘制它。当我点击一个按钮时,一个新的进程被创建,它正在用一个阻塞方法接收数据(这就是为什么我需要另一个进程)。我的问题是,如何将接收到的数据发送到主GUI进行绘图?下面是一个计划和我尝试过的: import multiprocessing as mp # Load the .ui file gui_main_class = uic.loadUiType("gui_main.ui")[0] # Function that receive the d

我有一个主图形用户界面来接收来自放大器的数据并绘制它。当我点击一个按钮时,一个新的进程被创建,它正在用一个阻塞方法接收数据(这就是为什么我需要另一个进程)。我的问题是,如何将接收到的数据发送到主GUI进行绘图?下面是一个计划和我尝试过的:

import multiprocessing as mp

# Load the .ui file
gui_main_class = uic.loadUiType("gui_main.ui")[0]

# Function that receive the data (RUNS IN OTHER PROCESS)
def manager_process(gui_main):
    amp = AmpReceiver()
    while True
        data = amp.getData()
        **HERE IS WHERE I HAVE TO CALL draw_data(data) IN GuiMainClass TO PLOT THE DATA**


# Main class that instantiates the UI
class GuiMainClass(QtWidgets.QMainWindow, gui_main_class):

    def __init__(self, parent=None):
        QtGui.QWindow.__init__(self, parent)
        self.setupUi(self)
        self.pushButton.clicked.connect(self.receive_data_process)

    def receive_data_process(self):
        self.data_receiver_process = mp.Process(target=manager_process)
        self.data_receiver_process.start()

    def draw_data(self, data):
        CODE TO UPDATE THE PLOT (NOT INTERESTING FOR THE QUESTION)


# Main function
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    application = GuiMainClass()
    sys.exit(app.exec_())

我认为这是可能的,但我不知道如何解决这个问题,因为我发现在进程之间传递一个对象实际上复制了对象,但没有在引用中传递它(所以你不能调用原始的方法)。那么,你认为什么是最好的选择?多谢各位

Python的
多处理
模块提供。对于您的情况,最简单的方法可能是:当
manager\u进程
检索数据时,它会将数据放在共享的
队列
实例上。在原始进程中,您运行一个单独的线程,从队列中检索项目并调用
draw_data

,您可以在QThread中运行另一个进程,并将接收到的数据发送到QT的主线程。请记住,只允许主线程访问QT的小部件。Qthread和进程之间的区别是什么?我之所以使用进程,是因为我想利用多核处理器,而使用QThread是可能的?我已经阅读了队列类文档,我想我会尝试一下,谢谢!当我找到一个解决方案时,我将更新questionQueue类和一个使用queue.get()阻塞方法侦听的线程,从而解决了我的问题。非常感谢你!