Python переменная общего ресурса многопроцессорной обработки с wxApp - PullRequest
0 голосов
/ 14 июля 2020

У меня есть 2 файла «console.py» и «gui .py». Я пытаюсь запустить приложение GUI, расположенное в «gui .py», из «console.py» в другом процессе и распечатать переменную «a» из файла console.py (который постоянно обновляется) в приложении GUI. Другими словами, я пытаюсь использовать переменные в двух файлах в двух разных процессах. Я просмотрел документацию по многопроцессорной обработке, расположенную здесь https://docs.python.org/2/library/multiprocessing.html, но я не знаю, как это сделать практически. Любая помощь приветствуется! Спасибо!

console.py:

import multiprocessing
from time import sleep
import random
import gui

a = []

word = input(">>")
if "plot" in word:
    multiprocessing.Process(target=gui.runPlot).start()
    while True:
        a.append(random.randint(0,10))
        sleep(1)
            

gui .py:

import wx

class MyFrame(wx.Frame):    
    def __init__(self):
        super().__init__(parent=None, title='Hello World')
        self.Show()
        
        self.redraw_timer = wx.Timer(self) 
        self.Bind(wx.EVT_TIMER, self.on_redraw_timer, self.redraw_timer)
        self.redraw_timer.Start(100)

    def on_redraw_timer(self, event):
        #here I want to print the "a" variable from console.py
        print(console.a)

    
def runPlot():
    app = wx.App()
    frame = MyFrame()
    app.MainLoop()

1 Ответ

1 голос
/ 17 июля 2020

Вы можете попробовать PyPubSub, когда переменная a обновляется в console.py, она может ее передать. Слушатель pubsub в gui.py получит значение и обновит его соответствующим образом, ссылка: https://pypubsub.readthedocs.io/en/v4.0.3/usage/usage_basic.html

...