Python 다중 처리 For-Loop

Python Dajung Cheoli For Loop



다중 처리는 다중 스레딩과 비슷합니다. 그러나 스레딩에 사용되는 GIL로 인해 한 번에 하나의 스레드만 실행할 수 있다는 점에서 차별화됩니다. 멀티프로세싱은 여러 CPU 코어에서 작업을 순차적으로 수행하는 프로세스입니다. 스레드는 병렬로 작동할 수 없습니다. 그러나 다중 처리를 통해 프로세스를 설정하고 다양한 CPU 코어에서 동시에 실행할 수 있습니다. for 루프와 같은 루프는 가장 자주 사용되는 스크립팅 언어 중 하나입니다. 미리 정해진 반복 횟수와 같은 기준에 도달할 때까지 다양한 데이터를 사용하여 동일한 작업을 반복합니다. 루프는 각 반복을 하나씩 수행합니다.

예 1: Python 다중 처리 모듈에서 For-Loop 활용

이 예제에서는 for-loop 및 Python 다중 처리 모듈 클래스 프로세스를 사용합니다. Python 다중 처리 for-loop가 어떻게 작동하는지 빠르게 이해할 수 있도록 매우 간단한 예제로 시작합니다. 스레딩 모듈과 유사한 인터페이스를 사용하여 다중 처리는 프로세스 생성을 압축합니다.







다중 처리 패키지는 스레드가 아닌 하위 프로세스를 사용하여 로컬 및 원거리 동시성을 모두 제공하므로 Global Interpreter Lock을 피할 수 있습니다. 문자열 개체 또는 튜플일 수 있는 for 루프를 사용하여 시퀀스를 계속 반복합니다. 이것은 다른 프로그래밍 언어에서 볼 수 있는 키워드보다는 다른 프로그래밍 언어에서 볼 수 있는 반복자 메서드처럼 수행됩니다. 새로운 다중 처리를 시작하면 프로시저를 동시에 실행하는 for 루프를 실행할 수 있습니다.



'spyder' 도구를 활용하여 코드 실행을 위한 코드를 구현하는 것부터 시작하겠습니다. 우리는 'spyder'가 Python을 실행하는 데에도 최고라고 믿습니다. 코드가 실행 중인 다중 처리 모듈 프로세스를 가져옵니다. '프로세스 클래스'라고 하는 Python 개념의 다중 처리는 새로운 Python 프로세스를 생성하고 코드를 실행할 메서드를 제공하며 상위 응용 프로그램에 실행을 관리하는 방법을 제공합니다. Process 클래스에는 중요한 start() 및 join() 절차가 포함되어 있습니다.



다음으로 'func'라는 사용자 정의 함수를 정의합니다. 사용자 정의 함수이므로 원하는 이름을 지정합니다. 이 함수의 본문 내에서 'subject' 변수를 인수로 전달하고 'maths' 값을 전달합니다. 다음으로 'print()' 함수를 호출하여 'The name of the common subject is'라는 문장과 값을 포함하는 'subject' 인수를 전달합니다. 그런 다음 다음 단계에서는 'if name== _main_'을 활용하여 파일을 모듈로 가져올 때 코드 실행을 방지하고 콘텐츠가 스크립트로 실행될 때만 코드를 실행하도록 허용합니다.





시작하는 조건 섹션은 대부분의 경우 파일이 스크립트로 실행될 때만 실행되어야 하는 콘텐츠를 제공하는 위치로 생각할 수 있습니다. 그런 다음 인수 주제를 사용하고 '과학', '영어' 및 '컴퓨터'인 일부 값을 저장합니다. 그런 다음 다음 단계에서 프로세스에 'process1[]'이라는 이름이 지정됩니다. 그런 다음 'process(target=func)'를 사용하여 프로세스에서 함수를 호출합니다. Target은 함수를 호출하는 데 사용되며 이 프로세스를 'P' 변수에 저장합니다.

다음으로 'process1'을 사용하여 'func' 함수에 있는 목록 끝에 항목을 추가하는 'append()' 함수를 호출합니다. 프로세스가 'P' 변수에 저장되기 때문에 'P'를 이 함수의 인수로 전달합니다. 마지막으로 'P'와 함께 'start()' 함수를 사용하여 프로세스를 시작합니다. 그런 다음 'subject' 인수를 제공하고 제목에 'for'를 사용하면서 메서드를 다시 실행합니다. 그런 다음 'process1' 및 'add()' 메서드를 한 번 더 사용하여 프로세스를 시작합니다. 그런 다음 프로세스가 실행되고 출력이 반환됩니다. 그런 다음 절차는 'join()' 기술을 사용하여 종료하라는 지시를 받습니다. 'join()' 프로시저를 호출하지 않는 프로세스는 종료되지 않습니다. 한 가지 중요한 점은 프로세스를 통해 인수를 제공하려는 경우 'args' 키워드 매개변수를 사용해야 한다는 것입니다.




이제 'process' 함수를 사용하여 처음 호출하기 때문에 'func' 함수에 전달한 'maths' 주제에 대한 값을 전달하여 명령문이 먼저 표시되는 것을 출력에서 ​​볼 수 있습니다. 그런 다음 'append()' 명령을 사용하여 목록에 이미 있던 값을 마지막에 추가합니다. 이어 '과학', '컴퓨터', '영어'가 제시됐다. 그러나 보시다시피 값의 순서가 올바르지 않습니다. 절차가 끝나는 대로 신속하게 조치를 취하고 메시지를 보고하기 때문입니다.

예 2: 순차 For-Loop를 다중 처리 병렬 For-Loop로 변환

이 예에서 다중 처리 루프 작업은 병렬 for-loop 작업으로 변환되기 전에 순차적으로 실행됩니다. for 루프를 사용하여 컬렉션이나 문자열과 같은 시퀀스를 발생 순서대로 순환할 수 있습니다.

이제 코드 구현을 시작하겠습니다. 먼저 time 모듈에서 'sleep'을 가져옵니다. time 모듈의 'sleep()' 프로시저를 사용하면 원하는 만큼 호출 스레드의 실행을 일시 중지할 수 있습니다. 그런 다음 random 모듈에서 'random'을 사용하고 'func'라는 이름으로 함수를 정의하고 키워드 'argu'를 전달합니다. 그런 다음 'val'을 사용하여 임의의 값을 만들고 'random'으로 설정합니다. 그런 다음 'sleep()' 메서드를 사용하여 잠시 차단하고 'val'을 매개 변수로 전달합니다. 그런 다음 메시지를 전송하기 위해 'ready'라는 단어와 'arg'라는 키워드를 매개 변수로 전달하고 'created'를 전달하고 'val'을 사용하여 값을 전달하는 'print()' 메서드를 실행합니다.

마지막으로 'flush'를 활용하고 'True'로 설정합니다. 사용자는 Python의 인쇄 기능에서 플러시 옵션을 사용하여 출력을 버퍼링할지 여부를 결정할 수 있습니다. 이 매개변수의 기본값인 False는 출력이 버퍼링되지 않음을 나타냅니다. true로 설정하면 출력이 서로 이어지는 일련의 행으로 표시됩니다. 그런 다음 “if name== main”을 사용하여 진입 지점을 확보합니다. 다음으로 작업을 순차적으로 실행합니다. 여기서 범위를 '10'으로 설정합니다. 즉, 루프가 10번 반복된 후에 종료됩니다. 다음으로 'print()' 함수를 호출하고 'ready' 입력 문을 전달하고 'flush=True' 옵션을 사용합니다.


이제 코드를 실행할 때 루프로 인해 함수가 '10'번 실행되는 것을 볼 수 있습니다. 인덱스 0에서 시작하여 인덱스 9까지 10번 반복합니다. 모든 메시지에는 'arg' 및 생성 번호로 전달하는 기능 번호인 작업 번호가 포함되어 있습니다.


이 순차 루프는 이제 다중 처리 병렬 for 루프로 변환되고 있습니다. 우리는 동일한 코드를 사용하지만 멀티프로세싱을 위한 몇 가지 추가 라이브러리와 함수를 사용할 것입니다. 따라서 앞에서 설명한 것처럼 다중 처리에서 프로세스를 가져와야 합니다. 다음으로 'func'라는 함수를 만들고 'val=random'을 사용하여 난수를 얻기 전에 키워드 'arg'를 전달합니다.

그런 다음 'print()' 메서드를 호출하여 메시지를 표시하고 'val' 매개 변수를 제공하여 약간의 시간을 지연시킨 후 'if name= main' 함수를 사용하여 진입점을 확보합니다. 그러면 프로세스를 생성하고 'process'를 사용하여 프로세스에서 함수를 호출하고 'target=func'를 전달합니다. 그런 다음 'func', 'arg'를 전달하고 값 'm'을 전달하고 루프가 '10' 반복 후에 함수를 종료함을 의미하는 범위 '10'을 전달합니다. 그런 다음 'process'와 함께 'start()' 메서드를 사용하여 프로세스를 시작합니다. 그런 다음 'join()' 메서드를 호출하여 프로세스의 실행을 기다린 후 모든 프로세스를 완료합니다.


따라서 코드를 실행할 때 함수는 기본 프로세스를 호출하고 실행을 시작합니다. 그러나 모든 작업이 완료될 때까지 완료됩니다. 각 작업이 동시에 수행되기 때문에 알 수 있습니다. 완료되자마자 메시지를 보고합니다. 즉, 메시지가 순서에 맞지 않더라도 '10' 반복이 모두 완료된 후 루프가 종료됩니다.

결론

이 기사에서는 Python 다중 처리 for-loop를 다루었습니다. 또한 두 개의 삽화를 제시했습니다. 첫 번째 그림은 Python의 루프 다중 처리 라이브러리에서 for-loop를 활용하는 방법을 보여줍니다. 두 번째 그림은 순차 for 루프를 병렬 다중 처리 for 루프로 변경하는 방법을 보여줍니다. Python 다중 처리용 스크립트를 구성하기 전에 다중 처리 모듈을 가져와야 합니다.