동시 프로그래밍에서는 코루틴 외에 멀티스레딩과 멀티프로세스가 자주 사용되는 두 가지 모드입니다. CPython의 GIL 제한으로 인해(Jython과 IronPython에는 GIL이 없고 PyPy는 GIL을 제거하려고 합니다.) GIL을 획득한 스레드만 CPU를 사용할 수 있습니다. 차단됩니다(파일 읽기 및 쓰기, 네트워크 액세스 등). 기본적으로 누구도 CPython의 멀티스레딩을 사용하지 않습니다. 따라서 이 기사에서는 보다 유용한 Python 다중 프로세스 프로그래밍에 대해 설명합니다.
참고: 추천 학습: Python 비디오 튜토리얼)# 🎜🎜#
이 문서에서 설명하는 환경은 Linux 운영 체제의 CPython(대부분의 POSIX 시스템에도 적용 가능)이며 Windows 운영 체제 또는 기타 Python 구현에는 적용되지 않을 수 있습니다. 다음에서는 모호함을 피하기 위해 "메인 프로세스" 또는 "현재 프로세스"를 사용하여 하위 프로세스를 생성한 프로세스를 참조하고, "xx의 상위 프로세스"가 아니면 "상위 프로세스"를 사용하지 않습니다. "라고 명시적으로 명시되어 있습니다. 멀티 스레드 프로그래밍 중 호출 가능 객체를 전달해야 하는 것과는 달리, 멀티 프로세스 프로그래밍 중에는 기본 프로세스가 하위 프로세스에 복사되며 하위 프로세스가 직접 실행하도록 요구할 수 없습니다. 호출 가능한 객체. POSIX 시스템에서는 이러한 복사 작업이 clone() 및 fork() 시스템 호출로 완료되며 일반적으로 후자가 사용됩니다.fork()가 성공적으로 실행되면 메인 프로세스와 자식 프로세스에 각각 자식 프로세스의 PID와 0이 반환되고 이후 실행 코드가 달라지기 시작합니다. 실패하면(메모리 부족, PID가 상한에 도달하는 등) 하위 프로세스가 생성되지 않고 기본 프로세스는 -1을 반환하며 errno는 해당 오류 코드로 설정됩니다.
CPython 구현에서 os.fork()는 주로 fork() 함수를 캡슐화한 것입니다. 차이점은 예외의 errno 속성이 해당 오류 코드입니다.
따라서 다중 프로세스 Python 코드는 대략 다음과 같습니다.
import os try: pid = os.fork() if pid == 0: # 子进程 # 子进程的代码 else: # 主进程 # 主进程的代码 except OSError: # 主进程处理 fork 失败的代码
위 내용은 Python에서 다중 프로세스 프로그래밍을 사용하는 경우의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!