[英]How to parallel to processes at a time using python
我先研究了一下,却找不到答案。 我正在尝试使用与wxpython在Python中制作的GUI并行的GUI运行我的另一个程序。 我要强调的def是def“ startsumo”与def“ onSurasakPhase3(event):”平行。 问题是,每当我单击导致定义为“ startsumo”的“ 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()
由于对startsumo()中sumoProcess.wait()的调用,您的主线程正在等待子进程完成。 如果希望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(例如,如果您需要将其杀死)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.