【发布时间】:2020-12-09 16:10:43
【问题描述】:
Python 3.6.4 - Kivy 1.11.1 - KivyMD 0.104.1
我对 Kivy 和 kivyMD 还很陌生,对线程和共享资源更是陌生。
今天,我用 SmartTileWithLabels 依次填写了 3 个 MDGridlayouts(sbgridfamily、sbgridgender、sbgridspecies)。它工作正常,但是加载时间很长(约 5 秒)。
为了优化这个加载,我试过了
-
将负载拆分到不同的线程中,而不使用锁或 信号量,一些单元格最终为空。
-
从结构中删除 MDGridlayouts 并在其上创建它们 飞入一个线程,然后将第一个图块添加到 一个 MDGrid 布局。
_apply_rule assert(rule not in self.rulectx) AssertionError
那么并行构建 MDGridlayouts 的最佳方法是什么?
屏幕的结构如下:
<Screen>
BoxLayout:
orientation:'vertical'
MDToolbar:
title: 'Titre'
...
MDTabs:
Tab:
text: "Famille"
ScrollView:
id: sbgfscrollview
do_scroll_x: False
MDGridLayout:
id: sbgridfamily
...
Tab:
text: "Genre"
ScrollView:
do_scroll_x: False
MDGridLayout:
id: sbgridgender
cols: 3
...
Tab:
text: "Esp\u00E8ce"
ScrollView:
do_scroll_x: False
MDGridLayout:
id: sbgridspecies
cols: 4
...
# Will always be at the bottom of the screen.
BottomAppBar:
【问题讨论】:
-
请提供minimal reproducible example。具体来说就是多线程代码。
-
您好 John,我理解您的要求,但是我无法提供不再存在的代码。它没有按预期工作,我将其删除以恢复到以前的版本。为了重现性,我必须提供从 sqlite 数据库中提取的数据集和使用的照片。我作为业余爱好者(爱好)开发的应用程序需要做很多工作。感谢您花时间阅读我的问题。
标签: multithreading kivy kivymd