파이썬 멀티프로세싱? 코드 작동원리가 궁금합니다.


import time
import multiprocessing as mp
import wx

def myWorker(a, b):
    time.sleep(3)
    print('{} * {} = {}'.format(a, b, a*b))

def onProcess(event):
    jobs = mp.cpu_count() * 2
    a = 5
    b = 10
    for job in range(jobs):
        mp.Process(target = myWorker, args = (a, b,)).start()

def onGUI(event):
    print('GUI is not blocked')

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
       wx.Frame.__init__(self, parent, id, title)
       panel = wx.Panel(self, wx.ID_ANY)
       sizer = wx.BoxSizer(wx.VERTICAL)
       gui_proc_btn = wx.Button(panel, wx.ID_ANY, 'GUI Process')
       other_proc_btn = wx.Button(panel, wx.ID_ANY, 'Other process')

       gui_proc_btn.Bind(wx.EVT_BUTTON, onGUI)
       sizer.Add(gui_proc_btn, 0, wx.ALL, 5)
       other_proc_btn.Bind(wx.EVT_BUTTON, onProcess)
       sizer.Add(other_proc_btn, 0, wx.ALL, 5)
       panel.SetSizer(sizer)

class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, -1, 'test.py')
        frame.Show(True)
        return True

if __name__ == '__main__':
    app = MyApp()
    app.MainLoop()

위 코드를 실행하면 두 종류 버튼아이콘이 있습니다. def onProcess(event) 함수안에서 멀티프로세싱으로 실행하고있는데 타겟이 타임슬립이 작동는 함수 인데 버튼을 누르면 프로그램이 멈추지 않고 다른 버튼 프로그램이 실행이 됩니다 클래스2개 줘서 그런거같지는 않고... 저도 비슷하게 만들어봤는데 저는 프로그램이 타임슬립 시간만큼 정지하는데... 위 코는 멈추지않고 작동이 가능한지 궁금합니다..

import wx, time
import multiprocessing

class f(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None)
        self.panel = wx.Panel(self)

        self.button = wx.Button(self.panel, -1, "클릭", pos=(100,100))
        self.button.Bind(wx.EVT_BUTTON, self.proccessing, id=-1)

    def proccessing(self, e):
        multiprocessing.Process(target=self.timesleep()).start()

    def timesleep(self):
        time.sleep(3)
        for i in range(10, 20):
            print(i)

if __name__ == '__main__':
    app = wx.App()
    fr = f()
    fr.Show(True)
    app.MainLoop()

조회수 124


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close