2016-11-03 3 views
1

В настоящее время работает над проектом, для которого требуется многопоточность для взаимодействия с физическим устройством, при открытии активного кадра для отправки инструкций.Python Multiprocessing with Frame

Проблемы заключается в том, что, когда кадр порожден и кнопка «Hello» нажата, метод test побежал и Process работает LEDBehavior.BlinkYellowLightEverySecond() правильно быть побежали, но кнопка остается в ее нажатие графического состояния и окно становится отвечать на запросы.

Вот код этого кадра.

import LEDBehavior 

class MainFrame (Frame): 

    def __init__(self, master=None): 

     Frame.__init__(self, master) 
     self.pack() 
     self.createWidgets() 

    def createWidgets(self): 

     self.hi_there = Button(self) 
     self.hi_there["text"] = "Hello", 
     self.hi_there["command"] = self.test 

     self.hi_there.pack({"side": "left"}) 

    def test (self): 

     p1 = Process (LEDBehavior.BlinkYellowLightEverySecond()) 
     p1.start() 
     p1.join() 

# create the application 
myapp = MainFrame() 

# 
# here are method calls to the window manager class 
# 
myapp.master.title ("Sample Text inc, Security Software Professionals") 
myapp.master.maxsize (1920, 1080) 
myapp.master.minsize (800, 640) 

# start the program 
myapp.mainloop() 

ответ

1

Это происходит из-за:

p1.join() 

Вы хотите сказать, ваш основной процесс ждать на p1. BlinkYellowLightEverySecond похоже на тип функции, которая может работать вечно до остановки, и я предполагаю, что вы не хотите останавливать свою программу для этого. Просто удалите join и добавьте кнопку для остановки/изменения мигания.

EDIT

Вторая ошибка я пропустил:

p1 = Process (LEDBehavior.BlinkYellowLightEverySecond()) 

кортеж() после Blink ... на самом деле делает вызов, так что ваши вызова функции в главном процессе! Удалите(), и вызовите конструктор правильно:

p1 = Process (target = LEDBehavior.BlinkYellowLightEverySecond) 

см https://docs.python.org/2/library/multiprocessing.html#multiprocessing.Process.

+0

Я удалил строку 'p1.join()', но проблема остается, и Frame остается невосприимчивой. – Vanitas

+0

Можете ли вы разместить код для blink ...? – kabanus

+0

http://pastebin.com/GePfrgzv – Vanitas