멀티프로세싱 프로그램 실행시 수십개의 프로그램이 실행됩니다.
조회수 141회
먼저 만들고 있는 프로그램의 설명입니다.
- 유튜브 채팅창을 크롤링하여 그 정보를 큐에 넣어서 전달(멀티프로세스)
- 전달된 큐의 내용을 파이게임에서 받아서 이미지를 화면에 뿌림
아래는 작성한 코드입니다.
main.py--
import chat
import pygame
import random
import glob
import re
from multiprocessing import Process, Queue
if __name__ == "__main__":
width = 1600
height = 900
imagesFolderPath = "./images"
R = 0
G = 255
B = 0
videoId = ""
FPS = 60
paidOutSpeed=5
paidInSpeed=5
# 설정파일 경로
configFile = "./config.txt"
pygame.init()
중략...
config.close()
q = Queue()
q.put(overComment)
#멀티 프로세스 실행
th1 = Process(target=chat.fetch_comments, args=(q, videoId))
th1.start()
# 화면 크기 설정
screen = pygame.display.set_mode((width, height))
#파이게임 화면출력, 이미지 출력
후략...
chat.py
import pytchat
def fetch_comments(chatImageNum, videoId):
chat = pytchat.create(videoId)
runningChat = True
while True:
for c in chat.get().sync_items():
chatImageNum.put(c.message)
코드는 이상입니다. th1.start()가 움직일 때 if name == "main"를 계속 불러와서 새로운 프로세스가 만들어지고... 새로운 파이게임 스크린이 만들어집니다
VSCode로 실행할 때는 문제없이 실행이 됩니다만(프로세스가 새로 만들어지지 않음), pyinstaller로 실행파일을 만들어 실행하면 프로세스가 계속해서 만들어지는 문제가 있습니다
원인이나 수정방법을 알 수 있을까요?
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
if name == "main": 코드블럭은 파이썬에서 스크립트가 실행되는 경우 해당 블록 내의 코드를 실행하도록 지시하는 코드입니다. 이는 모듈을 임포트할 때 해당 모듈의 코드가 실행되지 않도록 하는 것을 방지하기 위한 것입니다.
따라서, main.py에서 if name == "main": 코드블럭을 사용하는 것은 해당 스크립트가 실행될 때만 th1.start()를 실행한다는 것을 보장합니다. 그러나 pyinstaller로 실행 파일을 만들 때, 이 if 블록이 올바르게 작동하지 않을 수 있습니다.
따라서 main.py에서 if name == "main": 블록의 내용을 main() 함수 내부에 넣고, if name == "main": 아래에서 main() 함수를 호출하도록 변경하면 됩니다. 예를 들어:
def main(): width = 1600 height = 900 imagesFolderPath = "./images" R = 0 G = 255 B = 0 videoId = "" FPS = 60 paidOutSpeed=5 paidInSpeed=5 # 설정파일 경로 configFile = "./config.txt" pygame.init() # ... config.close() q = Queue() q.put(overComment) #멀티 프로세스 실행 th1 = Process(target=chat.fetch_comments, args=(q, videoId)) th1.start() # 화면 크기 설정 screen = pygame.display.set_mode((width, height)) #파이게임 화면출력, 이미지 출력 # ... if __name__ == "__main__": main()
이렇게 수정하면 th1.start()가 if name == "main":에서만 실행되도록 보장할 수 있습니다.
- 답변감사합니다! 하지만 th1(#파이게임 화면출력, 이미지 출력이후처리포함)이 무한히 실행되는 문제는 고쳐지지 않았습니다... 다른 방법을 찾아봐야겠네요... 2023.2.19 02:35
댓글 입력