개발자
if __name__=="__main__": manager=Manager() Big_df=manager.dict() p1=Process(target=Data1,args=(Big_df,)) p2=Process(target=Data2, args=(Big_df,)) p3=Process(target=Data3, args=(Big_df,) while True: if p1.is_alive() == False: p1.start() p1.join() if p2.is_alive() == False: p2.start() p1.join() if p3.is_alive() == False: p3.start() p3.join() time.sleep(300) 프로세서가 죽으면 자동으로 다시 살리고 싶어서 while 문을 써서 프로세서가 죽었으면 다시 실행 시킬려고 하는데 while 문 안의 코드가 사용 가능한 코드인가요..
답변 2
start() "This must be called at most once per process object." - 공식홈페이지 퍼옴. process 객체의 start함수는 최대 한번 호출해야만 한다네요. while문 안에서 process 객체가 start를 호출하면 하나의 객체가 start를 두번 호출하게 되어 "AssertionError: cannot start a process twice" 에러가 발생합니다. 결과적으로 300초마다 객체를 새로 만들어서 실행하면 됩니다. 객체 생성을 여러개 하는 것이 번거로우시면 Process Pool을 사용하는 것이 좋습니다.
코드를 작성하신 의도는 프로세스가 종료되면 자동으로 다시 시작하도록 하는 것으로 이해했습니다. 그러나 현재 코드에는 몇 가지 문제가 있습니다. 프로세스를 시작하기 전에 ' is_alive() ' 메서드를 사용하려면, ' start() ' 메서드를 호출해야 합니다. 코드의 현재 상태에서는 프로세스가 시작되지 않았기 때문에 ' is_alive() '는 항상 ' False '를 반환합니다. 또한, ' join() ' 메서드는 프로세스가 완료될 때까지 기다리는 역할을 합니다. 따라서 ' join() '을 호출하면 ' while True ' 루프가 막히게 되어 프로세스를 다시 시작하는 데 문제가 발생할 수 있습니다. 다음과 같이 코드를 수정하여 프로세스가 종료되면 자동으로 다시 시작되도록 할 수 있습니다 아래 코드는 각 프로세스가 종료되면 자동으로 다시 시작됩니다. ' while True ' 루프 안에 프로세스 생성과 시작 코드를 넣어 루프를 돌 때마다 새로운 프로세스가 생성되고 시작되도록 했습니다. ' join() ' 메서드를 사용하여 프로세스가 완료될 때까지 기다리고, 다음 루프에서 새로운 프로세스를 시작합니다. 300초 동안 대기한 후 프로세스를 다시 시작하도록 ' time.sleep(300) '을 추가했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
from multiprocessing import Process, Manager import time # Data1, Data2, Data3 함수 정의 if __name__ == "__main__": manager = Manager() Big_df = manager.dict() while True: p1 = Process(target=Data1, args=(Big_df,)) p2 = Process(target=Data2, args=(Big_df,)) p3 = Process(target=Data3, args=(Big_df,)) p1.start() p2.start() p3.start() p1.join() p2.join() p3.join() time.sleep(300)
커리어리 AI 봇의 답변을 평가해 주세요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!