작성
·
238
0
안녕하세요 질문이 있습니다.
스레드 또는 프로세스 최대 생성 개수을 300개로 제한을 두고,
특정 스레드 또는 프로세스의 작업 종료시점에 새로운 스레드 또는 프로세스 생성하여 제한 개수를 지속적으로 유지할 수 있는 방법이 궁금합니다.
즉 생성 제한개수 300개는 넘지 않지만
300개 이하시 계속적으로 추가하며 300개를 지속적으로 유지하며 실행할 수 있는 방법이 있을까요?
구체적으로 예를들면 300개를 생성했는데
몇개의 프로세스가 작업을 완료하면 300개의 제한선에서 몇개의 생성 가용 개수가 허용될텐데(ex, -3개 종료 시 남은 수 297개: 3개 추가 가능)
이를 다른 스레드나 프로세스 종료를 기다리지 않고, 바로 다시 생성해서 채울 수 있는 방법이 있을까요?(ex, 남은 수 297개 + 추가 가능 3개: 300개)
단 항상 최대 수치는 300개입니다.
코멘트 주시면 감사하겠습니다.
(만약 가능하시다면 코드로 말씀해주시면 더욱 감사하겠습니다!)
답변 1
0
안녕하세요.
좋은 질문이예요! 예제로 한 번 만들어봐도 좋을 것 같습니다.
임계치의 스레드를 유지하는 방법에 대해서 질문 주신 것 같습니다.
코드를 제공드리는건 쉽지 않을 것 같습니다. 다만, 시간을 가지고 다음 예제로 한 번 추가해 보도록 하겠습니다.
짧은 검색으로는 대기열에 스레드를 담아놓고 완료된 스레드를 체크 후 제거해주고
지속적으로 생성하는 방법이 주로 쓰이는 것 같습니다.
해당 코드는 검색으로는 찾기 힘든것 같네요. 혹여나 발견한다면, 제공드리도록 하겠습니다.
감사합니다. 제가 읽어봤던 링크를 전달 드립니다.
답변 감사합니다.
제가 이 질문을 드린 이유는 프로그램 동작의 안전성을 위해서
때에 따라서 병렬처리의 프로세스 개수의 제한은 필수적으로 요구될 수 있을 것 같아서입니다.
즉 안전성을 위한 개수를 제한하되, 개수 내의 병렬처리의 효율성을 유지시키고 싶은 생각입니다.
강의에서 말씀하신대로 join을 이용하면 자식 프로세스가 완전히 종료 후,
다시 프로세스 개수를 제한하여 안정적으로 동작을 시킬 수 있지만(자식 프로세스의 무제한 생성 방지)
만약 자식 프로세스가 특정 현상(네트워크 지연 트래픽등)으로 처리가 지연된다면
부모가 해당 자식을 기다리게 되어 join을 이용시 병렬 처리의 효율성이 매우 떨어질 것 같습니다.
이를 해결하기 위한 파이썬의 문법이나 코딩 기술이 있는지 궁금했습니다.
혹시 추후에 아이디어가 생각나시거나 추가로 코멘트 주실 사항이 있으면
언제든지 연락주시면 감사하겠습니다.
https://superfastpython.com/threadpool-python/
threadpool를 사용 후
pool의 사이즈를 정의후(300)
완료 된 스레드는 제거
완료 할 스레드는 다시 pool에 주입
형태도 생각해볼 수 있을 것 같습니다.