如何在PYQT GUI应用程序中并行运行FORTRAN代码?

时间:2017-12-03 13:00:03

标签: python c++ user-interface pyqt4 qthread

我正在创建一个小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_()

我还添加了错误消息:enter image description here

我尝试使用self.pool.close(),self.pool.terminate()这些命令正在停止进程。与此同时,我无法使用开始按钮重新启动该过程。

我还想知道是否可以重启一个过程?

提前致谢。

0 个答案:

没有答案