kivy multiprocessing, je ne comprend pas comment sa marche

a marqué ce sujet comme résolu.

Bonjour, j’utilise l’interface graphique Kivy dans mon programme python, j’ai plusieurs onglets dans cette interface, et je voudrais charger chaque onglet dans un autre coeurs de cpu

j’ai donc suivie la doc et j’ai un code qui marche :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.tabbedpanel import TabbedPanel
from kivy.uix.tabbedpanel import TabbedPanelItem
from kivy.clock import Clock
from functools import partial

import multiprocessing


def worker():
    print('calculator')
    x = 2
    Clock.schedule_interval(partial(func, x), 1)


def func(x, dt):
    print("x={0}, dt={1}".format(x, dt))
    x * x
    print("x * x = {}".format(x * x))


class MyApp(App):
    # layout
    def build(self):
        layout = BoxLayout(orientation='vertical')

        tab=TabbedPanel(do_default_tab=False)
        self.tabitem1=TabbedPanelItem(text='tab1')
        self.tabitem2=TabbedPanelItem(text='tab2')
        self.tabitem3=TabbedPanelItem(text='tab3')
        tab.add_widget(self.tabitem1)
        tab.add_widget(self.tabitem2)
        tab.add_widget(self.tabitem3)
        layout.add_widget(tab)

        #load tab in other core cpu ?
        #self.tab1()

        p = multiprocessing.Process(target=self.tab1())
        p.start()

        p2 = multiprocessing.Process(target=worker())
        p2.start()

        return layout

    def tab1(self):
        layout1 = BoxLayout(orientation='vertical')

        btn = Button(text='btn1', font_size=24)
        btn.bind(on_press=self.click_button)
        layout1.add_widget(btn)

        btn2 = Button(text='btn2', font_size=24)
        btn2.bind(on_press=self.click_button)
        layout1.add_widget(btn2)

        self.tabitem1.add_widget(layout1)

    def click_button(self, btn):
        print(btn.text)


if __name__ == "__main__":
    MyApp().run()

Mais au démarrage j’ai plusieurs processus python qui se crée (ce qui est normal) mais sont killer après 3-4 secondes et il en reste plus qu’un, pourquoi ? pourquoi chaque onglet n’est pas séparé dans des processus unique ? j’ai l’impression que kivy charge bien chaque onglet dans des processus différent mais après fusionne tous dans 1 seul processus/coeurs de cpu. si quelqu’un pouvait m’expliquer plus en détail ce qui se passe concrètement avec kivy et le multiprocessing

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte