메뉴 건너뛰기

enjoyTools.net

Kivy와 Flask를 Multiprocess로 돌리기

2018.02.03 15:08

꿈돌이 조회 수:555

Kivy안에서 Flask돌리면서 Queue를 이용하여 Flask에서 Kivy로 데이터 보내기

 

Thread 대신 Multiprocess로 해서 아래와 같은 식으로 짜면 일단은 돈다.

 

class ThreadMain:

    is_running = True

 

    def __init__(self):

        self.flaskqueue_thread = threading.Timer(1, self.threadFlaskQueue)

 

    def threadFlaskQueue(self, mode = "none"):

        thread = self.flaskqueue_thread

        if (mode == "start"):

            thread.start()

        elif (mode == "stop"):

            thread.cancel()

        else:

            while self.is_running == True:

                if app_main.que.qsize() > 0:

                    self.que_data = app_main.que.get_nowait()

                    print("Queue:: " + self.que_data)

 

                time.sleep(0.05)

 

            thread.cancel()

 

class AppMain(App):

    th_obj = ""

 

    def build(self):

        self.que = Manager().Queue()

 

        self.flask_proc = Process(target=flaskRun, args=(self.que,))

        self.flask_proc.start()

 

        self.triggerThreads()

 

        # 이하 kvlang 설정 등 생략

 

    def on_stop(self):

        # 종료시 쓰레드 종료

        self.th_obj.is_running = False

 

        # 종료시 플라스크 종료

        self.flask_proc.terminate()

        self.flask_proc.join()

 

    def triggerThreads(self, mode="none"):

        if self.th_obj != "":

            self.th_obj.threadFlaskQueue("stop")

 

        self.th_obj = ThreadMain()

        self.th_obj.is_running = True

        self.th_obj.threadFlaskQueue("start")

 

 

from flask import Flask, request

flask = Flask(__name__)

 

@flask.route('/')

def frontPage():

    result = 'Hello World!!'

    flask.que.put(result)

 

    return result

 

def flaskRun(que):

    flask.que = que

    flask.que.put('Flask begin')

 

    flask.run(host='0.0.0.0')

 

from multiprocessing import Process, Manager, Queue

if __name__ == '__main__':

    app_main = AppMain()

    app_main.run()

 

 

Kivy랑 Flask간 데이터 맞교환 하려면 Queue 두 개 돌리면 될 거 같다.

 

끝.