首页 > 解决方案 > 如何防止 kivy 应用程序在执行某些后端功能时变得无响应

问题描述

我有一个 kivy 应用程序,它需要在运行时的某个时间点下载互联网数据,问题是当下载数据的功能运行时应用程序变得无响应,有时可能需要几分钟才能下载数据。下载所需文件后它会继续正常工作,但是任何不知道此错误的人都会在应用程序无响应时轻松退出应用程序。

这是一些示例代码:

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.floatlayout import FloatLayout
import datetime
from duka.core.utils import TimeFrame
import duka.app.app as import_data

class btnFloatie(FloatLayout):
    def __init__(self):
        btn = Button(text="Download files")
        btn.bind(on_press=self.get_files)
        self.add_widget(btn)

    def get_files(self):
        start_date = datetime.date(2020,02,02)
        end_date = datetime.date(2020,03,02)

        import_data(["AUDCAD"], start_date, end_date, 1, TimeFrame.H4, ".", True)

class MainApp(App):
    def build(self):
        return btnFloatie

MainApp().run()

我该怎么做才能使应用程序在下载数据时不会崩溃?

标签: androidpython-3.xkivy

解决方案


您的数据下载是一个阻塞函数调用,因此一旦应用程序开始执行它,它就不会处理其他正常任务(检查输入、更新 gui),直到它完成。

简单的解决方案是在线程中进行下载。这意味着执行这些 gui 任务的主线程不会被阻塞,并且应用程序将保持响应。


推荐阅读