Python 다중 처리 대기열

Python Dajung Cheoli Daegiyeol



데이터 구조의 가장 중요한 요소는 큐입니다. Python 다중 처리의 기반이 되는 '선입선출' 데이터 구조 대기열은 비슷합니다. 프로세스가 데이터를 수집할 수 있도록 프로세스 기능에 대기열이 제공됩니다. 대기열에서 제거할 첫 번째 데이터 항목은 입력할 첫 번째 항목입니다. 대기열의 'put()' 메서드를 사용하여 데이터를 대기열에 추가하고 'get()' 메서드를 사용하여 대기열에서 데이터를 검색합니다.

예 1: Queue() 메서드를 사용하여 Python에서 다중 처리 대기열 만들기

이 예제에서는 'queue()' 메서드를 사용하여 Python에서 다중 처리 대기열을 만듭니다. 멀티프로세싱은 시스템에서 둘 이상의 프로세스를 동시에 수행하기 위해 하나 이상의 CPU를 사용하는 것을 말합니다. Python에서 구성된 모듈인 Multiprocessing은 프로세스 간 전환을 용이하게 합니다. 멀티프로세싱으로 작업하기 전에 프로세스 속성에 익숙해져야 합니다. 대기열이 데이터 모델의 중요한 구성 요소라는 것을 알고 있습니다. '선입선출(First-In-First-Out)' 아이디어를 기반으로 구축된 표준 데이터 대기열과 Python 다중 처리는 정확히 일치합니다. 일반적으로 대기열은 Python 개체를 저장하며 작업 간 데이터 전송에 중요합니다.







'spyder' 도구는 존재하는 Python 스크립트를 구현하는 데 사용되므로 간단히 시작하겠습니다. Python multiprocessing 스크립트를 실행 중이므로 먼저 multiprocessing 모듈을 가져와야 합니다. 다중 처리 모듈을 'm'으로 가져와 이를 수행했습니다. 'm.queue()' 기술을 사용하여 멀티프로세싱 'queue()' 메서드를 호출합니다. 여기에서 'queue'라는 변수를 만들고 그 안에 다중 처리 'queue()' 메서드를 배치합니다. 대기열이 '선입선출' 순서로 항목을 저장한다는 것을 알고 있으므로 먼저 추가한 항목이 먼저 제거됩니다. 멀티프로세싱 큐를 실행한 후 '멀티프로세싱 큐가 있습니다'라는 문장을 인수로 전달하여 'print()' 메서드를 호출하여 화면에 표시합니다. 그러면 생성된 큐를 이 변수에 저장하기 때문에 'print()' 메서드의 괄호 안에 'queue' 변수를 전달하여 큐를 출력합니다.




다음 이미지는 이제 Python 다중 처리 대기열이 구성되었음을 보여줍니다. print 문이 먼저 표시됩니다. 이 멀티프로세싱 큐가 지정된 메모리 주소에 생성된 후 두 개 이상의 실행 중인 프로세스 간에 개별 데이터를 전송하는 데 사용할 수 있습니다.







예 2: 'Qsize()' 메서드를 활용하여 Python에서 다중 처리 대기열의 크기 결정

이 경우 다중 처리 대기열의 크기를 결정합니다. 다중 처리 대기열의 크기를 계산하기 위해 'qsize()' 메서드를 사용합니다. 'qsize()' 함수는 Python 다중 처리 대기열의 실제 크기를 반환합니다. 즉, 이 메서드는 대기열의 총 항목 수를 제공합니다.

코드를 실행하기 전에 Python 다중 처리 모듈을 'm'으로 가져오는 것으로 시작하겠습니다. 그런 다음 'm.queue()' 명령을 사용하여 다중 처리 'queue()' 함수를 호출하고 결과를 'Queue' 변수에 넣습니다. 그런 다음 'put()' 메서드를 사용하여 다음 줄의 항목을 대기열에 추가합니다. 이 메서드는 데이터를 대기열에 추가하는 데 사용됩니다. 따라서 'put()' 메서드를 사용하여 'Queue'를 호출하고 괄호 안에 정수를 요소로 제공합니다. 'put()' 함수를 사용하여 더한 숫자는 '1', '2', '3', '4', '5', '6' 및 '7'입니다.



또한 'Queue'를 사용하여 멀티프로세싱 큐의 크기를 가져오고 멀티프로세싱 큐와 함께 'qsize()'를 호출합니다. 그런 다음 새로 형성된 'result' 변수에 'qsize()' 메서드의 결과를 저장합니다. 그런 다음 'print()' 메서드를 호출하고 'The multiprocessing queue's size is'라는 명령문을 매개 변수로 전달합니다. 다음으로 'print()' 함수에서 'result' 변수를 호출합니다. 이 변수에 크기가 저장되어 있기 때문입니다.


출력 이미지에는 표시된 크기가 있습니다. 'put()' 함수를 사용하여 multiprocessing queue에 7개의 요소를 추가하고 'qsize()' 함수를 사용하여 크기를 결정하면 multiprocessing queue의 크기가 '7'로 표시됩니다. 크기 앞에 '다중 처리 대기열의 크기'라는 입력 문이 표시됩니다.

예제 3: Python 다중 처리 대기열에서 'Put()' 및 'Get()' 메서드 사용

이 예제에서는 Python 다중 처리 대기열의 'put()' 및 'get()' 대기열 메서드가 사용됩니다. 이 예제에서는 두 개의 사용자 정의 함수를 개발합니다. 이 예제에서는 '5'개의 임의 정수를 생성하는 프로세스를 생성하는 함수를 정의합니다. 또한 'put()' 메서드를 사용하여 큐에 추가합니다. 'put()' 메서드는 항목을 대기열에 넣는 데 사용됩니다. 그런 다음 대기열에서 숫자를 검색하고 해당 값을 반환하기 위해 다른 함수를 작성하고 절차 중에 호출합니다. 'get()' 함수는 'put()' 메서드를 사용하여 삽입한 대기열에서 데이터를 검색하는 데 이 메서드가 사용되기 때문에 대기열에서 숫자를 검색하는 데 사용합니다.

이제 코드 구현을 시작하겠습니다. 먼저 이 스크립트를 구성하는 4개의 라이브러리를 가져옵니다. 먼저 time 모듈에서 'sleep'을 가져와 초 단위로 측정된 일정 시간 동안 실행을 지연하고 난수를 생성하는 데 사용되는 random 모듈에서 'random'을 가져온 다음 이 코드가 프로세스를 생성하기 때문에 다중 처리에서 'process'를 가져옵니다. , 그리고 마지막으로 멀티프로세싱의 '대기열'입니다. 초기에 클래스 인스턴스를 구성하면 대기열을 사용할 수 있습니다. 기본적으로 이것은 무한 큐 또는 최대 크기가 없는 큐를 설정합니다. 최대 크기 옵션을 0보다 큰 숫자로 설정하면 크기 제한이 있는 생성이 가능합니다.


우리는 함수를 정의합니다. 그런 다음 이 함수는 사용자 정의이므로 'function1'이라는 이름을 지정하고 'queue'라는 용어를 인수로 전달합니다. 그런 다음 'print()' 함수를 호출하여 'builder: Running', 'flush' 및 개체 'True' 문을 전달합니다. Python의 인쇄 기능에는 사용자가 이 출력을 버퍼링할지 여부를 선택할 수 있는 플러시라는 고유한 옵션이 있습니다. 다음 단계는 작업을 생성하는 것입니다. 이를 위해 'for'를 사용하고 'm' 변수를 만들고 범위를 '5'로 설정합니다. 그런 다음 다음 줄에서 'random()'을 사용하고 결과를 'value'라는 변수에 저장합니다. 이는 함수가 이제 5번의 반복을 완료하고 각 반복이 0에서 5까지의 임의의 정수를 생성함을 나타냅니다.

그런 다음 다음 단계에서 'sleep()' 함수를 호출하고 'value' 인수를 전달하여 특정 시간(초) 동안 부분을 지연시킵니다. 그런 다음 'put()' 메서드로 '대기열'을 호출하여 기본적으로 대기열에 값을 추가합니다. 그런 다음 사용자는 'queue.put()' 메서드를 한 번 더 호출하고 'None' 값을 전달하여 더 이상 수행할 작업이 없음을 알립니다. 그런 다음 'print()' 메서드를 실행하고 'builder: ready' 문을 'flush'와 함께 전달하고 'True'로 설정합니다.


이제 두 번째 함수인 “function2”를 정의하고 키워드 “queue”를 인수로 할당합니다. 그런 다음 'True'로 설정된 보고서 상태 'User: Running' 및 'flush'를 전달하면서 'print()' 함수를 호출합니다. while true 조건을 사용하여 'function2' 작업을 시작하여 데이터를 대기열에서 꺼내 새로 생성된 'item' 변수에 넣습니다. 그런 다음 'if' 조건인 'item is None'을 사용하여 조건이 참이면 루프를 중단합니다. 사용할 수 있는 항목이 없으면 중지하고 사용자에게 항목을 요청합니다. 값에서 얻은 항목이 null이면 작업이 루프를 중지하고 이 경우 종료됩니다. 그런 다음 다음 단계에서 'print()' 함수를 호출하고 'User: ready' 보고서와 'flush=True' 매개 변수를 제공합니다.


그런 다음 'If-name = main_'을 사용하여 메인 프로세스에 들어갑니다. 'queue()' 메서드를 호출하고 'queue' 변수에 저장하여 대기열을 만듭니다. 다음으로 사용자 함수 “function2”를 호출하여 프로세스를 생성합니다. 이를 위해 '프로세스' 클래스라고 합니다. 그 안에 'target=function2'를 전달하여 프로세스에서 함수를 호출하고 'queue' 인수를 전달하고 'User_process' 변수에 저장합니다. 그런 다음 'User_ process' 변수로 'start()' 메서드를 호출하여 프로세스가 시작됩니다. 그런 다음 동일한 절차를 반복하여 프로세스에서 'function1'을 호출하고 '빌더 프로세스' 변수에 넣습니다. 그런 다음 'join()' 메서드로 프로세스를 호출하여 실행을 기다립니다.


이제 표시되었으므로 출력에서 ​​두 함수의 문을 볼 수 있습니다. 'put()'과 'get()' 메소드를 각각 'get()' 메소드를 사용하여 추가한 항목을 표시합니다.

결론

이 기사에서 Python 다중 처리 대기열에 대해 배웠습니다. 주어진 삽화를 활용했습니다. 처음에는 queue() 함수를 사용하여 Python 다중 처리에서 대기열을 만드는 방법을 설명했습니다. 그런 다음 'qsize()' 메서드를 사용하여 대기열의 . 대기열의 put() 및 get() 메서드도 사용했습니다. time 모듈의 sleep 클래스와 random 모듈의 random 클래스는 모두 마지막 예제에서 논의되었습니다.