Запуск функции и класса одновременно python
Подскажите пожалуйста как запустить функцию и класс одновременно, пробовал вот так:
from kivy.app import App
from kivy.uix.button import Button
from multiprocessing import Process
def test2():
while 1:
print('Hello world')
class Test1(App):
def click(self, args):
if self.button.text == "Вкл":
self.button.background_color = [1,0,0,1]
self.button.text = "Выкл"
elif self.button.text == "Выкл":
self.button.text = "Вкл"
self.button.background_color = [.15, .70, .24, 1]
def build(self):
self.button = Button (
text = "Вкл",
font_size = 20,
background_color = [.15, .70, .24, 1],
pos_hint= {'x': .65,'top': .15},
size_hint = (.21,.11),
background_normal = '',
on_press = self.click
)
return self.button
if __name__ == "__main__":
p1 = Process(target=Test1)
p1.start()
p2 = Process(target=Test2())
p2.start()
Ответы (2 шт):
Автор решения: Victor VosMottor thanks Monica
→ Ссылка
from kivy.app import App
from kivy.uix.button import Button
from multiprocessing import Process
def test2():
while 1:
print('Hello world')
class Test1(App):
def click(self, args):
if self.button.text == "Вкл":
self.button.background_color = [1, 0, 0, 1]
self.button.text = "Выкл"
elif self.button.text == "Выкл":
self.button.text = "Вкл"
self.button.background_color = [.15, .70, .24, 1]
def build(self):
self.button = Button(
text="Вкл",
font_size=20,
background_color=[.15, .70, .24, 1],
pos_hint={'x': .65, 'top': .15},
size_hint=(.21, .11),
background_normal='',
on_press=self.click
)
return self.button
if __name__ == "__main__":
p1 = Process(target=Test1().run)
p1.start()
p2 = Process(target=test2())
p2.start()
Автор решения: Михаил Муругов
→ Ссылка
Что в Вашем варианте неправильно:
p1 = Process(target=Test1)- тут Вы в качествеtargetпередаёте класс (даже не экземпляр!!). Т.е. предполагается, что в процессе будет запущеноTest1()(или, то же самое,Test1.__call__()) - звучит странно, согласитесь.p2 = Process(target=Test2())- тут Вы в качествеtargetпередаёте результат выполнения функцииTest2. Но в функцииTest2бесконечный цикл, так что результат оттуда не вернётся. Но если даже функция что-то вернёт, это значение должно быть вызываемым (например, другая функция).
Как правильно:
p1 = Process(target=Test1().run)- создаётся экземпляр (()) классаTest1, затем в процессе будет вызван методrunэкземпляра (ошибкаselfиз Вашего комментария).p2 = Process(target=Test2)- в отдельном процессе будет "крутиться" функцияTest2(а не результат из неё, как в Вашем варианте).