我正在尝试为那些不太精明的同事开发一个kivy应用程序,该应用程序围绕我为项目开发的一些计算包装了一个不错的GUI;计算包括使用pathos.multiprocessing.ProcessPool()分配工作以加快运行时间,但是当kivy尝试执行计算时,它将打开数十个程序克隆,然后冻结。曾尝试集成freeze_support,但无济于事。我怎样才能在不麻烦的情况下执行过程池请求呢?使用PyCharm IDE以Python 3.7.2进行编码。
-GUI.py文件-
import kivy
kivy.require("1.9.0")
from kivy.config import Config
Config.set('graphics', 'width', '600')
Config.set('graphics', 'height', '300')
from calc import main
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
class CalcGridLayout(GridLayout):
def calculate(self):
main()
class graphics(App):
def build(self):
return CalcGridLayout()
graphics().run()
-calc.py文件(示例错误)-
def main():
import numpy as np
from pathos.multiprocessing import ProcessPool as Pool
grid = np.array([(m, n)
for m in np.arange(1, 1000, 0.1)
for n in np.arange(1, 1000, 0.1)])
def calc(grid):
var1 = grid[0]
var2 = grid[1]
y = var1*var2
return y
res = Pool().map(calc, grid)
return res
-graphics.kv文件-
<CalcGridLayout>:
id: calculator
rows: 7
padding: 10
spacing: 10
# Where input is displayed
BoxLayout:
height: 10
Label:
spacing: 10
text: '#MoProblems'
BoxLayout:
Button:
id: run_button
text: "Run"
on_press: root.calculate()
on_press: self.background_color = (1, 1, 0, 1)
在应用程序中按“运行”按钮会尝试执行代码,但会开始在屏幕上克隆该应用程序,然后冻结