python 트 리 베 리 파 는 대기 열 을 통 해 프로 세 스 의 상호작용 을 실현 하 는 프로그램 분석

앞 에 쓰다
현재 카 트 는 이미지 인식 과 운동 통 제 를 해 야 하기 때문에 2 개의 프로 세 스 를 초기 화하 여 각각 동작 을 완성 해 야 한다.운동 통 제 는 이미지 인식 결과 가 필요 하기 때문에 python 문법 이 2 개의 프로 세 스 간 의 협동 협력 을 실현 하 는 것 과 관련 되 어 있 습 니 다.이 블 로 그 는 실제 python 프로그램 과 결합 하여 대기 열 을 통 해 프로 세 스 의 상호작용 을 실현 하고 대기 열 을 통 해 프로 세 스 의 상호작용 을 실현 합 니 다.
프로그램 분석
먼저 우리 가 필요 로 하 는 라 이브 러 리 함 수 를 소개 합 니 다.

import time
from multiprocessing import Process, Queue
from multiprocessing import Process, Queue는 주요 라 이브 러 리 입 니 다.역할 은 대기 열과 프로 세 스 조작 함 수 를 제공 하 는 것 입 니 다.이번 테스트 에서 우리 가 사용 한 프로 세 스 와 대기 열 조작 함 수 는 다음 과 같 습 니 다.

q1.get()#  q1      
q1.put("q1 put things1")# q1        
p1 = Process(target=test1, args=(q1, q2))#   p1  
p1.start()#  p1  
p1.join()# p1        
q1.qsize()#  q1     
테스트 중인 스 레 드 와 프로 세 스 의 대응 관계:

q1   -> q1  
q2   -> q2  
상기 기본 함수 가 있 으 면 우리 의 프로그램 이 실 현 된 것 을 볼 수 있 습 니 다.프로그램 에서 먼저 프로 세 스 초기 화,시작 과 시스템 스케줄 링 을 한 것 을 볼 수 있 습 니 다.이 문 구 를 실행 한 후에 p1 과 p2 프로 세 스 가 초기 화 되 었 다 고 생각 할 수 있 습 니 다.

p1 = Process(target=test1, args=(q1, q2))
p2 = Process(target=test2, args=(q1, q2))

p1.start()
p2.start()

p1.join()
p2.join()
프로 세 스 초기 화 완료 후 주요 테스트 함 수 를 볼 수 있 습 니 다.먼저test1

def test1(q1, q2):
    q1.put("fisrt data")
    while(1):
        s = q2.get()
        print('q2 left + ' + str(q2.qsize()))
        print('q1 get + ' + s)
        q1.put("q1 put things1")
        q1.put("q1 put things2
") time.sleep(1)
이전 초기 화 함수 에서 저 희 는 p1 프로 세 스 를 초기 화 했 습 니 다.즉,test1먼저 실 행 됩 니 다.따라서 시작 할 때 프로 세 스 의 대기 열 에 내용 이 있 도록 함수 의 처음부터 q1 대기 열 에 내용'fishrt data'를 추가 하여 테스트 가 지속 적 으로 진행 되도록 했 습 니 다.그래서 저 는test1프로 세 스 를 순환 으로 설정 하 였 습 니 다.test1에 서 는 q2 대기 열 에 있 는 내용 과 q2 대기 열 크기 를 가 져 와 인쇄 한 다음 q1 대기 열 에 새로운 내용 을 넣 습 니 다.여기 두 노드 의 데 이 터 를 넣 었 습 니 다.각각'q1 put things 1'과'q1 put things 2'입 니 다.
여기 서 나 는 문 제 를 하나 제기 한다.
p1 프로 세 스 가 q2 대기 열의 내용 을 가 져 올 때 p1 프로 세 스 는 q2 대기 열의 모든 내용 을 꺼 냅 니까?아니면 q2 대기 열의 맨 앞 에 있 는 데이터 만 꺼 냅 니까?
이제 우 리 는 이 문 제 를 해결 할 것 이다.다음은 test 2 함수 에서 무엇 을 했 는 지 살 펴 보 겠 습 니 다.

def test2(q1, q2):
    while(1):
        s = q1.get()
        print('q1 left + ' + str(q1.qsize()))
        print('q2 get + ' + s)
        q2.put("q2 put data1")
        time.sleep(1)
test2함수 에서 하 는 일이 비교적 적 습 니 다.바로 q1 대기 열 에 있 는 데이터 와 q1 의 남 은 대기 열 크기 를 가 져 와 인쇄 한 다음 에 q2 대기 열 에'q2 put data 1'을 추가 하 는 것 입 니 다.
결과 분석
main 함수 의 호출 을 살 펴 보 겠 습 니 다.

if __name__ == '__main__':
    p1 = Process(target=test1, args=(q1, q2))
    p2 = Process(target=test2, args=(q1, q2))

    p1.start()
    p2.start()

    p1.join()
    p2.join()
main 함수 에서 스 레 드 시작 작업 만 했 습 니 다.출력 결 과 를 다시 보 겠 습 니 다.
在这里插入图片描述
결과 에서 볼 수 있 듯 이 q1 스 레 드 는 매번 2 개의 노드 데 이 터 를 추가 한 다음 에 p2 프로 세 스 는 q1 스 레 드 에서q1.get()작업 을 합 니 다.순환 횟수 가 계속 증가 함 에 따라 우 리 는 q1 대기 열의 길이 가 계속 증가 하 는 것 을 발견 할 수 있 습 니 다.그래서 우 리 는 결론 을 얻 을 수 있 습 니 다.
p1 프로 세 스 가 q2 대기 열의 내용 을 가 져 올 때 p1 프로 세 스 는 q2 대기 열의 맨 앞 에 있 는 데 이 터 를 꺼 냅 니 다.
python 크 랜 베 리 파 가 대기 열 을 통 해 프로 세 스 의 상호작용 을 실현 하 는 프로그램 분석 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 python 크 랜 베 리 파 프로 세 스 의 상호작용 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 을 바 랍 니 다!

좋은 웹페이지 즐겨찾기