执行pathos.multiprocessing函数时,Kivy应用程序克隆/不响应

时间:2019-06-20 16:51:59

标签: python multiprocessing kivy pathos

我正在尝试为那些不太精明的同事开发一个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)

在应用程序中按“运行”按钮会尝试执行代码,但会开始在屏幕上克隆该应用程序,然后冻结

0 个答案:

没有答案