I am a beginner of python+kivy. I am working on an App. My App takes more than 12 seconds to startup. I don’t know why it needs such a long time . There are nearly 40 pages in my App, so I guess too many pages are the reason. In order to reduce the launch time, I try to use multiprocessing to load these pages, use 6 processes to load subfunctions(part 1~part6). But I failed with the log :“TypeError: no default __reduce__ due to non-trivial __cinit__”.
Please find attached my main.py code and the running logs. I need help to solve the problem, or find other ways to speedup the App launch. I would be very appriciated if you can help to correct my code and make it runnable.
#主程序入口
from
kivy.app import App
from kivy.uix.screenmanager import Screen,ScreenManager
from kivy.core.window import Window
from kivy.resources import resource_add_path
from kivy.core.text import LabelBase,DEFAULT_FONT
resource_add_path('./site_packages') # 全局申明载入字体
LabelBase.register(DEFAULT_FONT, 'simsun.ttf')
from multiprocessing import Process
import threading
#欢迎页面和主菜单
from pages.welcomepage.start1 import Start1Page
from pages.welcomepage.agreement import AgreementPage
from pages.welcomepage.help1 import Help1Page
from pages.welcomepage.help2 import Help2Page
from pages.welcomepage.help3 import Help3Page
from pages.welcomepage.welcome import WelcomePage
from pages.welcomepage.buykey import BuykeyPage
from pages.welcomepage.paybill import PaybillPage
from pages.mainmenupage.mainmenu import MainmenuPage
from pages.mainmenupage.agreement1 import Agreement1Page
from utils.outputrecycleview import OutputrecycleviewPage
from utils.jobimage import JobimagePage
#地基基础
from pages.categorypage.category1 import Category1Page
from pages.jobpage.Base.job1a1 import Job1a1Page
from pages.jobpage.Base.job1a2 import Job1a2Page
from pages.jobpage.Base.job1a3 import Job1a3Page
from pages.jobpage.Base.job1a4 import Job1a4Page
from pages.jobpage.Base.job1a4image import Job1a4imagePage
#钢筋混凝土构件
from pages.categorypage.category2 import Category2Page
from pages.jobpage.RC.job2a1 import Job2a1Page
from pages.jobpage.RC.job2a2 import Job2a2Page
from pages.jobpage.RC.job2a3 import Job2a3Page
from pages.jobpage.RC.job2a4 import Job2a4Page
from pages.jobpage.RC.job2b1 import Job2b1Page
from pages.jobpage.RC.job2b2 import Job2b2Page
from pages.jobpage.RC.job2b3 import Job2b3Page
from pages.jobpage.RC.job2b4 import Job2b4Page
from pages.jobpage.RC.job2c1 import Job2c1Page
from pages.jobpage.RC.job2c2 import Job2c2Page
from pages.jobpage.RC.job2c3 import Job2c3Page
from pages.jobpage.RC.job2c4 import Job2c4Page
from pages.jobpage.RC.job2d1 import Job2d1Page
from pages.jobpage.RC.job2d2 import Job2d2Page
from pages.jobpage.RC.job2d3 import Job2d3Page
from pages.jobpage.RC.job2d4 import Job2d4Page
from pages.jobpage.RC.job2d5 import Job2d5Page
from pages.jobpage.RC.job2e1 import Job2e1Page
from pages.jobpage.RC.job2e2 import Job2e2Page
from pages.jobpage.RC.job2e3 import Job2e3Page
from pages.jobpage.RC.job2e4 import Job2e4Page
from pages.jobpage.RC.job2f1 import Job2f1Page
from pages.jobpage.RC.job2f2 import Job2f2Page
from pages.jobpage.RC.job2f3 import Job2f3Page
from pages.jobpage.RC.job2f4 import Job2f4Page
def part1(self):
print("part1")
pages1={'Start1':Start1Page(),'Agreement':AgreementPage(),'Help1':Help1Page(),'Help2':Help2Page(),
'Help3':Help3Page(),'Welcome':WelcomePage(),'Buykey':BuykeyPage(),'Paybill':PaybillPage()
}
for item,page in pages1.items():
self.default_page=page
screen=Screen(name=item)
screen.add_widget(self.default_page)
self.screen_manager.add_widget(screen)
return
def part2(self):
print("part2")
pages2={'Mainmenu':MainmenuPage(),'Agreement1':Agreement1Page(),'Category1':Category1Page(),
'Category2':Category2Page(),'Outputrecycleview':OutputrecycleviewPage(),'Jobimage':JobimagePage()
}
for item,page in pages2.items():
self.default_page=page
screen=Screen(name=item)
screen.add_widget(self.default_page)
self.screen_manager.add_widget(screen)
return
def part3(self):
print("part3")
pages3={'Job1a1':Job1a1Page(),'Job1a2':Job1a2Page(),'Job1a3':Job1a3Page(),'Job1a4':Job1a4Page(),'Job1a4image':Job1a4imagePage(),
'Job2a1':Job2a1Page(),'Job2a2':Job2a2Page(),'Job2a3':Job2a3Page(),'Job2a4':Job2a4Page()
}
for item,page in pages3.items():
self.default_page=page
screen=Screen(name=item)
screen.add_widget(self.default_page)
self.screen_manager.add_widget(screen)
return
def part4(self):
print("part4")
pages4={'Job2b1':Job2b1Page(),'Job2b2':Job2b2Page(),'Job2b3':Job2b3Page(),'Job2b4':Job2b4Page(),
'Job2c1':Job2c1Page(),'Job2c2':Job2c2Page(),'Job2c3':Job2c3Page(),'Job2c4':Job2c4Page()
}
for item,page in pages4.items():
self.default_page=page
screen=Screen(name=item)
screen.add_widget(self.default_page)
self.screen_manager.add_widget(screen)
return
def part5(self):
print("part5")
pages5={'Job2d1':Job2d1Page(),'Job2d2':Job2d2Page(),'Job2d3':Job2d3Page(),'Job2d4':Job2d4Page(),'Job2d5':Job2d5Page(),
'Job2e1':Job2e1Page(),'Job2e2':Job2e2Page(),'Job2e3':Job2e3Page(),'Job2e4':Job2e4Page()
}
for item,page in pages5.items():
self.default_page=page
screen=Screen(name=item)
screen.add_widget(self.default_page)
self.screen_manager.add_widget(screen)
return
def part6(self):
print("part6")
pages6={'Job2f1':Job2f1Page(),'Job2f2':Job2f2Page(),'Job2f3':Job2f3Page(),'Job2f4':Job2f4Page()
}
for item,page in pages6.items():
self.default_page=page
screen=Screen(name=item)
screen.add_widget(self.default_page)
self.screen_manager.add_widget(screen)
return
class MyApp(App):
def build(self):
#Window.fullscreen=False
#Window.size=(400,720)
Window.size=(342,719) #develop value
Window.clearcolor=(1,1,1,1)
self.load_kv("pages/welcomepage/start1.kv")
self.load_kv("pages/welcomepage/agreement.kv")
self.load_kv("pages/welcomepage/help1.kv")
self.load_kv("pages/welcomepage/help2.kv")
self.load_kv("pages/welcomepage/help3.kv")
self.load_kv("pages/welcomepage/welcome.kv")
self.load_kv("pages/welcomepage/buykey.kv")
self.load_kv("pages/welcomepage/paybill.kv")
self.load_kv("pages/mainmenupage/mainmenu.kv")
self.load_kv("pages/mainmenupage/agreement1.kv")
self.load_kv("utils/outputrecycleview.kv")
self.load_kv("utils/jobimage.kv")
self.load_kv("pages/categorypage/category1.kv")
self.load_kv("pages/jobpage/Base/job1a1.kv")
self.load_kv("pages/jobpage/Base/job1a2.kv")
self.load_kv("pages/jobpage/Base/job1a3.kv")
self.load_kv("pages/jobpage/Base/job1a4.kv")
self.load_kv("pages/jobpage/Base/job1a4image.kv")
self.load_kv("pages/categorypage/category2.kv")
self.load_kv("pages/jobpage/RC/job2a1.kv")
self.load_kv("pages/jobpage/RC/job2a2.kv")
self.load_kv("pages/jobpage/RC/job2a3.kv")
self.load_kv("pages/jobpage/RC/job2a4.kv")
self.load_kv("pages/jobpage/RC/job2b1.kv")
self.load_kv("pages/jobpage/RC/job2b2.kv")
self.load_kv("pages/jobpage/RC/job2b3.kv")
self.load_kv("pages/jobpage/RC/job2b4.kv")
self.load_kv("pages/jobpage/RC/job2c1.kv")
self.load_kv("pages/jobpage/RC/job2c2.kv")
self.load_kv("pages/jobpage/RC/job2c3.kv")
self.load_kv("pages/jobpage/RC/job2c4.kv")
self.load_kv("pages/jobpage/RC/job2d1.kv")
self.load_kv("pages/jobpage/RC/job2d2.kv")
self.load_kv("pages/jobpage/RC/job2d3.kv")
self.load_kv("pages/jobpage/RC/job2d4.kv")
self.load_kv("pages/jobpage/RC/job2d5.kv")
self.load_kv("pages/jobpage/RC/job2e1.kv")
self.load_kv("pages/jobpage/RC/job2e2.kv")
self.load_kv("pages/jobpage/RC/job2e3.kv")
self.load_kv("pages/jobpage/RC/job2e4.kv")
self.load_kv("pages/jobpage/RC/job2f1.kv")
self.load_kv("pages/jobpage/RC/job2f2.kv")
self.load_kv("pages/jobpage/RC/job2f3.kv")
self.load_kv("pages/jobpage/RC/job2f4.kv")
self.screen_manager=ScreenManager()
#将各页面加入列表
'''
part1_process=Process(target=part1,args=(self,))
part2_process=Process(target=part2,args=(self,))
part3_process=Process(target=part3,args=(self,))
part4_process=Process(target=part4,args=(self,))
part5_process=Process(target=part5,args=(self,))
part6_process=Process(target=part6,args=(self,))
part1_process.start()
part2_process.start()
part3_process.start()
part4_process.start()
part5_process.start()
part6_process.start()
part1_process.join()
part2_process.join()
part3_process.join()
part4_process.join()
part5_process.join()
part6_process.join()
'''
process=[Process(target=part1,args=(self,)),Process(target=part2,args=(self,)),Process(target=part3,args=(self,)),
Process(target=part4,args=(self,)),Process(target=part5,args=(self,)),Process(target=part6,args=(self,)) ]
[p.start() for p in process] # 开启了两个进程
[p.join() for p in process] # 等待两个进程依次结束
'''
part1(self)
part2(self)
part3(self)
part4(self)
part5(self)
part6(self)
#'''
return self.screen_manager
if __name__=="__main__":
SGenie_app=MyApp()
SGenie_app.title='结构精灵'
SGenie_app.run()