如何使用python一次并行处理

2024-04-27 03:12:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我先调查了一下,没能找到问题的答案。我正在尝试运行我的另一个程序,它与wxpython用Python编写的GUI并行。我要强调的def是def“startsumo”与def“onsuraskphase3(event):”并行。问题是,每当我点击“button2”时,它的功能是运行另一个由子进程调用的GUI,那么我就不能同时点击bmp按钮了。我所知道的是,这是一个顺序程序,我必须找到一种并行的方法来完成它,而不是一个序列。请帮忙。在

我有这样的东西:

class top(wx.Frame):

    def __init__(self,parent,id):
    wx.Frame.__init__(self,parent,id,'Frane aka window', size=(500,500))
    panel=wx.Panel(self)
    button=wx.Button(panel,label="exit",pos=(10,10),size=(60,60))
    self.Bind(wx.EVT_BUTTON, self.closebutton, button)
    self.Bind(wx.EVT_CLOSE, self.closewindow)

    button2=wx.Button(panel,label="START_SUMO",pos=(100,10),size=(100,60))
    self.Bind(wx.EVT_BUTTON, self.startsumo, button2)

    def onSurasakPhase3(event):
        print "surasak phase 3 is selected"

    bmp = wx.Bitmap("surasak_phase3.png", wx.BITMAP_TYPE_ANY)
    buttonOnSurasakPhase3 = wx.BitmapButton(panel, id=wx.ID_ANY, bitmap=bmp,
                              size=(bmp.GetWidth(), bmp.GetHeight()))
    buttonOnSurasakPhase3.Bind(wx.EVT_BUTTON, onSurasakPhase3)
    buttonOnSurasakPhase3.SetPosition((2*(bmp.GetWidth())+20,30))


    def startsumo(self,event):
        def run():
            traci.init(PORT)
            step = 0
            while step < 15200:
               traci.simulationStep()

               step += 1

        sumoProcess = subprocess.Popen(["sumo-gui ", "-c", "sathon_s_lefthand.sumo.cfg ","-a", "TESTTTT.add.xml ",
                                         "--remote-port", str(PORT)], stdout=sys.stdout, stderr=sys.stderr)

        run()
        sumoProcess.wait()

    def closebutton(self,event):
        self.Close(True)

    def closewindow(self, event):

        self.Destroy()

if __name__=='__main__':
app=wx.PySimpleApp()
frame=top(parent=None,id=-1)
frame.Show()
app.MainLoop()

Tags: selfeventidsizeinitbinddefbutton
2条回答

由于调用sumoproces.等等()在startsumo()中。如果您希望您的GUI能够响应,那么您不需要在那里等待。在

请尝试以下替换方法来替换您的def startsumo

def startsumo(self,event):
    traci.init(PORT)
    step = 0
    while step < 15200:
        traci.simulationStep()
        step += 1
    sumoProcess = subprocess.Popen(["sumo-gui ", "-c", "sathon_s_lefthand.sumo.cfg ","-a", "TESTTTT.add.xml ",
                                     " remote-port", str(PORT)], stdout=sys.stdout, stderr=sys.stderr).pid

它应该在不影响当前进程的情况下运行。
sumoProcess将包含正在运行的程序的pid,例如您需要终止它。在

相关问题 更多 >