본문 바로가기
반응형

subprocess3

Python - 병렬 처리 방안, 멀티 쓰레드(thread) vs 멀티 프로세스(multiprocessing, subprocess) Python 코드를 작성하다보면 시스템 I/O를 효과적으로 사용하는 병령 처리 프로세스를 고민하게된다. 병렬 처리란, 특정 Task를 동시에 실행함으로써 순차적으로 처리하는 기본 처리 프로세스 보다 이점을 가져갈 수 있다. 특히 HTTP와 같은 네트워크 요청이나 Disk등 시스템 자원을 사용하는 I/O 가 발생하는 경우 자원 I/O를 기다리지 않고 다른 Task로 실행할 수 있어 보다 효과적으로 프로세스를 처리할 수 있다. 그렇다면 Python에는 어떤 방식으로 병렬처리를 진행해볼 수 있을까? 필자가 생각하는 방안은 총 2가지 정도이다. 멀티 쓰레드(thread)를 사용하는 방법과 멀티 프로세스(process)를 사용하는 방법이다. 다만 이 멀티 쓰레드(thread)와 멀티 프로세스(process)를 시.. 2022. 9. 7.
Python - Zombie Process 처리 timeout Python 프로그램을 하다보면 보통 서브 프로세스를 생성하는 경우가 발새한다. 이때 프로그램의 로직을 잘 작성하였다면, 좀비 프로세스가 생성되지 않는다. 하지만 복잡한 프로그램, 특히 다중 실행이 가능한 멀티 프로세스로 구사하다보면, 종종 문제를 만나게 되는 부분이 종료가 되지 않는 좀비 프로세스들이다. 이를 효과적으로 관리할 수 있는 방안이 무엇일까 고민해보면서 사용할 수 있는 timeout과 필자의 생각에 대해서 정리해본다. timeout Python에서 process를 생성하는 subprocess 라이브러리에서 wait 함수를 이용하여 아래와 같이 timeout을 지정할 수 있다. >>> import subprocess >>> from subprocess import TimeoutExpired >.. 2022. 8. 25.
Python - subprocess, Popen, call차이 그리고 WorkDirectory 변경 Python에서 실행중 추가로 프로그램을 실행해야 하는 경우가 발생할 경우 subprocess 모듈을 이용해서 사용할 수 있다. 아마 이모듈을 사용할 때 가장 많은 찾아보게 되는 부분이 Popen과 Call의 차이 그리고 WorkDirectory 변경일 것 같다. 그럼 핵심만 간단히 정리해 보자. Popen 과 call의 차이점 Popen과 call의 가장 큰 차이점은 바로 결과를 기다릴 수 있는 구조인가 이다. 실제로 call은 Popen을 감싼 구조라고 할 수 있다. 즉 Popen으로 실행한 프로그램을 실행을 기다렸다가, 실행이 완료되었을 때 결과를 받을 수 있는 것이 call인것이다. 따라서 실행 결과를 기다릴 필요가 없다면, Popen을 사용하고, 실행 결과를 대기하였다가 확인해야 하는 경우 ca.. 2021. 5. 24.