• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

파이썬 병렬처리 관련 질문이 있습니다.

23.10.24 10:05 작성 조회수 184

0

안녕하세요 질문이 있습니다.

 

스레드 또는 프로세스 최대 생성 개수을 300개로 제한을 두고,

특정 스레드 또는 프로세스의 작업 종료시점에 새로운 스레드 또는 프로세스 생성하여 제한 개수를 지속적으로 유지할 수 있는 방법이 궁금합니다.

 

즉 생성 제한개수 300개는 넘지 않지만

300개 이하시 계속적으로 추가하며 300개를 지속적으로 유지하며 실행할 수 있는 방법이 있을까요?

 

구체적으로 예를들면 300개를 생성했는데

몇개의 프로세스가 작업을 완료하면 300개의 제한선에서 몇개의 생성 가용 개수가 허용될텐데(ex, -3개 종료 시 남은 수 297개: 3개 추가 가능)

이를 다른 스레드나 프로세스 종료를 기다리지 않고, 바로 다시 생성해서 채울 수 있는 방법이 있을까요?(ex, 남은 수 297개 + 추가 가능 3개: 300개)

단 항상 최대 수치는 300개입니다.

 

코멘트 주시면 감사하겠습니다.

(만약 가능하시다면 코드로 말씀해주시면 더욱 감사하겠습니다!)

 

답변 1

답변을 작성해보세요.

0

안녕하세요.

좋은 질문이예요! 예제로 한 번 만들어봐도 좋을 것 같습니다.

임계치의 스레드를 유지하는 방법에 대해서 질문 주신 것 같습니다.

코드를 제공드리는건 쉽지 않을 것 같습니다. 다만, 시간을 가지고 다음 예제로 한 번 추가해 보도록 하겠습니다.

짧은 검색으로는 대기열에 스레드를 담아놓고 완료된 스레드를 체크 후 제거해주고

지속적으로 생성하는 방법이 주로 쓰이는 것 같습니다.

해당 코드는 검색으로는 찾기 힘든것 같네요. 혹여나 발견한다면, 제공드리도록 하겠습니다.

감사합니다. 제가 읽어봤던 링크를 전달 드립니다.

https://discuss.python.org/t/thread-limits/24346/6

https://stackoverflow.com/questions/19369724/the-right-way-to-limit-maximum-number-of-threads-running-at-once

https://superfastpython.com/threadpool-python/

threadpool를 사용 후

  1. pool의 사이즈를 정의후(300)

  2. 완료 된 스레드는 제거

  3. 완료 할 스레드는 다시 pool에 주입

형태도 생각해볼 수 있을 것 같습니다.

답변 감사합니다.

 

제가 이 질문을 드린 이유는 프로그램 동작의 안전성을 위해서

때에 따라서 병렬처리의 프로세스 개수의 제한은 필수적으로 요구될 수 있을 것 같아서입니다.

즉 안전성을 위한 개수를 제한하되, 개수 내의 병렬처리의 효율성을 유지시키고 싶은 생각입니다.

 

강의에서 말씀하신대로 join을 이용하면 자식 프로세스가 완전히 종료 후,

다시 프로세스 개수를 제한하여 안정적으로 동작을 시킬 수 있지만(자식 프로세스의 무제한 생성 방지)

만약 자식 프로세스가 특정 현상(네트워크 지연 트래픽등)으로 처리가 지연된다면

부모가 해당 자식을 기다리게 되어 join을 이용시 병렬 처리의 효율성이 매우 떨어질 것 같습니다.

 

이를 해결하기 위한 파이썬의 문법이나 코딩 기술이 있는지 궁금했습니다.

혹시 추후에 아이디어가 생각나시거나 추가로 코멘트 주실 사항이 있으면

언제든지 연락주시면 감사하겠습니다.