파이썬 사용법, Python programming

Python os.eventfd()로 이벤트 알림 다루기 — 카운터 누적부터 poll 이벤트 루프 깨우기까지

스레드 간, 또는 프로세스 간에 "무슨 일이 일어났다"는 신호 하나만 가볍게 보내고 싶을 때 파이프나 소켓은 다소 과하다. eventfd는 커널이 관리하는 64비트 정수 카운터 하나를 파일 디스크립터로 노출해서, select/poll/epoll 같은…

Continue ReadingPython os.eventfd()로 이벤트 알림 다루기 — 카운터 누적부터 poll 이벤트 루프 깨우기까지

Python os.pidfd_open()으로 PID 재사용 레이스 없이 프로세스 관리하기

PID 기반 프로세스 관리(os.kill(pid, sig), os.waitpid(pid, ...))에는 근본적인 문제가 있다. PID는 재사용된다. 어떤 프로세스가 죽고 그 PID가 회수되면, 커널은 그 번호를 완전히 다른 새 프로세스에 다시 배정할 수 있다. 자식…

Continue ReadingPython os.pidfd_open()으로 PID 재사용 레이스 없이 프로세스 관리하기

Python inotify로 파일시스템 이벤트 감시하기

특정 디렉터리에 새 파일이 생기거나 로그 파일이 갱신될 때마다 즉시 반응해야 하는 스크립트를 짤 때, 가장 손쉬운 방법은 os.listdir()이나 파일의 mtime을 주기적으로 비교하는 폴링(polling)이다. 하지만 폴링 주기를 짧게 잡으면 CPU를…

Continue ReadingPython inotify로 파일시스템 이벤트 감시하기

Python asyncio로 비동기 시스템 모니터링 구현하기

서버 여러 대의 상태를 순차적으로 점검하는 스크립트를 짜본 적이 있다면 익숙한 문제가 있다. 호스트 10대를 ping으로 확인하는 데 각각 1초가 걸린다면, for 루프로 하나씩 처리할 경우 전체 실행 시간은 10초에…

Continue ReadingPython asyncio로 비동기 시스템 모니터링 구현하기

Python ctypes로 C 라이브러리 호출하기

파이썬으로 시스템 프로그래밍을 하다 보면 표준 라이브러리에 없는 저수준 기능이 필요한 순간이 온다. 특정 syscall을 직접 호출해야 하거나, 이미 검증된 C 라이브러리(.so)를 재사용하고 싶거나, 순수 파이썬으로는 느린 연산을 C로 짜둔…

Continue ReadingPython ctypes로 C 라이브러리 호출하기

Python subprocess로 시스템 명령어 제어하기

Python 스크립트에서 셸 명령어나 외부 프로그램을 호출해야 하는 상황은 흔하다. os.system()은 출력을 캡처할 수 없고, os.popen()은 에러 처리와 스트림 제어가 번거롭다. 특히 자동화 스크립트에서 외부 명령의 표준출력/표준에러를 각각 받아 로그로…

Continue ReadingPython subprocess로 시스템 명령어 제어하기

Pandas(판다스) 통계함수(mean, unique, value_counts)

데이터를 받으면 가장 먼저 하게 되는 작업이 값의 분포를 파악하는 것이다. Pandas는 평균을 구하는 mean(), 고유값을 뽑는 unique(), 값별 개수를 세는 value_counts() 같은 통계 함수를 기본으로 제공한다. 이 글에서는 예제…

Continue ReadingPandas(판다스) 통계함수(mean, unique, value_counts)