Python 在kivy中极其频繁地运行功能(kivy时钟/FreeClock)

Python 在kivy中极其频繁地运行功能(kivy时钟/FreeClock),python,bluetooth,kivy,clock,Python,Bluetooth,Kivy,Clock,我正在开发一个从蓝牙设备(我只需通过串行模块处理)接收数据的应用程序。我知道怎么做。但是在Kivy中赋予它新的生命——展示它——会造成所有东西都与FPS同步的问题。我想一直在后台运行该函数,每秒数百次。公平地说,在10000个传入数据包中,有10个可能是有用的。因此,如果按时钟调度,则每个周期必须(很好地)在20毫秒以下。 简单地说:如何独立于FPS运行其中一个函数?是否有一种干净的方法可以将免费版本的时钟仅用于一项功能,以及如何实现该功能? 我想要一个简单的解决方案,我可以重新发明轮子,但我不


我正在开发一个从蓝牙设备(我只需通过串行模块处理)接收数据的应用程序。我知道怎么做。但是在Kivy中赋予它新的生命——展示它——会造成所有东西都与FPS同步的问题。我想一直在后台运行该函数,每秒数百次。公平地说,在10000个传入数据包中,有10个可能是有用的。因此,如果按时钟调度,则每个周期必须(很好地)在20毫秒以下。
简单地说:如何独立于FPS运行其中一个函数?是否有一种干净的方法可以将免费版本的时钟仅用于一项功能,以及如何实现该功能?
我想要一个简单的解决方案,我可以重新发明轮子,但我不想。

非常感谢您提供的任何帮助。

您可以使用
线程来实现此目的。
下面是一个使用kivy的
线程
的小例子:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.clock import Clock
from kivy.properties import NumericProperty
import threading
import time

Builder.load_string('''

<MyLayout>:
    Label:
        text: str(root.data)
''')


class MyLayout(BoxLayout):
    data = NumericProperty(0)
    count = 0
    running = True

    def __init__(self,**kwargs):
        super(MyLayout,self).__init__(**kwargs)
        Clock.schedule_once(self.after_init)

    def after_init(self, dt):
        threading.Thread(target=self.func).start()

    def func(self):
        while self.running:
            self.data += 1
            time.sleep(0.1)


class MyApp(App):

    def build(self):
        self.root = MyLayout()
        return self.root

    def on_stop(self):
        self.root.running = False

MyApp().run()
从kivy.app导入应用
从kivy.lang导入生成器
从kivy.uix.boxlayout导入boxlayout
从kivy.clock导入时钟
从kivy.properties导入NumericProperty
导入线程
导入时间
Builder.load_字符串(“”)
:
标签:
文本:str(root.data)
''')
类MyLayout(框布局):
数据=数值属性(0)
计数=0
运行=真
定义初始(自我,**kwargs):
超级(MyLayout,self)。\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
时钟。计划一次(自启动后)
初始后的def(自身,dt):
threading.Thread(target=self.func.start())
def func(自我):
自运行时:
self.data+=1
睡眠时间(0.1)
类别MyApp(应用程序):
def生成(自):
self.root=MyLayout()
返回自根
def on_停止(自):
self.root.running=False
MyApp().run()