我正在创建一个小GUI,用户点击一个按钮,FORTRAN中的数值模拟代码启动,其执行显示忙指示器移动(正面和背面)。
使用pool.apply_async方法,我可以成功运行FORTRAN代码和繁忙指示符。但是当我停止进程并重新启动它时,我遇到了问题。当我重新启动进程时,它没有运行并抛出一个断言错误。 (断言self._state == RUN)
注意:我不应该随时打扰FORTRAN代码。因为它是为一些数值模拟编写的固定的。它的执行时间超过30分钟
以下是我的代码:
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
from PyQt4 import uic
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import FortranSimulation
import time
qtCreatorFile = "you_atmpt.ui" # Loading UI file
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
def pass_args(args):
b = 10.0
print b
b = b + 2
FortranSimulation.fortrancode(b)
return b
class MainClass(QtGui.QMainWindow,Ui_MainWindow): # MAin GUI class
def __init__(self):
super(MainClass,self).__init__()
self.setupUi(self) # 2 PB
self.StartCalculaltion_button.clicked.connect(self.Fortran_Calc)
self.Stop_button.clicked.connect(self.Stop_All)
self.pool = mp.Pool(None)
def Fortran_Calc(self):# Initiation of other process for 'Fortran Calculation'
self.label_2.setText('Calculation is in progress!')
self.progressBar.setRange(0,0)
index = 1
surface_id = 2
self.pool.apply_async(pass_args, [(surface_id, index)],
callback=self.callback)
def callback(self,b):
print b
self.label.setText('Calculation is completed!')
def Stop_All(self): # Termination of process
self.progressBar.setRange(0,1)
self.pool.close()
self.pool.terminate()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = MainClass()
window.show()
app.exec_()
我尝试使用self.pool.close(),self.pool.terminate()这些命令正在停止进程。与此同时,我无法使用开始按钮重新启动该过程。
我还想知道是否可以重启一个过程?
提前致谢。