python 다 중 프로 세 스 구현 프로 세 스 간 통신 인 스 턴 스

python 의 다 중 스 레 드 는 실제 다 중 스 레 드 가 아 닙 니 다.다 중 핵 CPU 자원 을 충분히 사용 하려 면 python 에서 대부분의 경우 다 중 프로 세 스 를 사용 해 야 합 니 다.Python 은 매우 좋 은 다 중 프로 세 스 패키지 multiprocessing 을 제공 합 니 다.하나의 함수 만 정의 하면 Python 은 다른 모든 일 을 완성 할 수 있 습 니 다.이 가방 을 통 해 단일 프로 세 스 에서 동시 실행 으로 전환 할 수 있 습 니 다.multiprocessing 은 하위 프로 세 스,통신 과 데이터 공유,서로 다른 형식의 동기 화 를 지원 하고 Process,Queue,Pipe,Lock 등 구성 요 소 를 제공 합 니 다.
multiprocessing.Queue()
Queue 의 경우 부모 프로 세 스에 서 두 개의 하위 프로 세 스 를 만 들 고 하 나 는 Queue 에 데 이 터 를 쓰 고 하 나 는 Queue 에서 데 이 터 를 읽 습 니 다.
multiprcessing.Queue.put()입 대 를 위 한 작업
multiprcessing.Queue.get()이 팀 을 위해 조작 합 니 다.
대기 열 스 레 드 와 프로 세 스 보안
put(obj[, block[, timeout]])
obj 를 대기 열 에 넣 습 니 다.선택 할 수 있 는 매개 변수 block 이 True(기본 값)이 고 timeout 이 None(기본 값)이면 남 은 슬롯 이 사용 할 때 까지 차단 합 니 다.시간 초과 가 양수 라면 최대 시간 초과 초 수 를 막 을 수 있 으 며,이 시간 동안 사용 가능 한 슬롯 이 없 으 면 Queue.Full 이상 이 발생 할 수 있 습 니 다.그렇지 않 으 면(블록 은 False)남 은 슬롯 을 즉시 사용 할 수 있 으 면 하나의 항목 을 대기 열 에 두 고 그렇지 않 으 면 Queue.Full 이상 이 발생 합 니 다(이 경우 시간 초과 무시).
get([block[, timeout]])
대기 열 에서 항목 을 삭제 하고 되 돌려 줍 니 다.선택 할 수 있 는 args 블록 이 True(기본 값)이 고 시간 초과 가 None(기본 값)이면 프로젝트 가 사용 할 때 까지 차단 합 니 다.시간 초과 가 양수 라면 시간 초과 초 수 를 막 고 이 시간 내 에 사용 가능 한 항목 이 없 을 때 Queue.Empty 이상 을 일 으 킵 니 다.그렇지 않 으 면(block 은 False)한 항목 이 즉시 사용 가능 하 다 면 항목 을 되 돌려 줍 니 다.그렇지 않 으 면 Queue.Empty 이상 이 발생 할 수 있 습 니 다(이 경우 시간 초과 무시).

#- * -coding: utf - 8 - * -
  from multiprocessing
import Process, Queue
import os
import time
import random


#           :
  def write(q):
  print('Process to write: %s' % os.getpid())
for value in ['A', 'B', 'C']:
  print('Put %s to queue...' % value)
q.put(value)
time.sleep(random.random())

#           :
  def read(q):
  print('Process to read: %s' % os.getpid())
while True:
  value = q.get()
print('Get %s from queue.' % value)

if __name__ == '__main__': #     Queue,         :
q = Queue()
pw = Process(target = write, args = (q, ))
pr = Process(target = read, args = (q, ))#      pw,   :
  pw.start()#      pr,   :
  pr.start()#   pw  :
  pw.join()# pr       ,        ,       :
  pr.terminate()
출력

Process to read: 5836
Process to write: 6472
Put A to queue...
Put B to queue...
Get A from queue.
Put C to queue...
Get B from queue.
Get C from queue.

Process finished with exit code 0
multiprocessing.Pipe()
Pipe()함 수 는 파이프 로 연 결 된 연결 대상 을 되 돌려 줍 니 다.기본 적 인 상황 에서 양 방향(양 방향)입 니 다.
파이프()가 되 돌아 오 는 두 연결 대상 은 파이프 의 양 끝 을 대표 합 니 다.모든 연결 대상 에는 send()와 recv()방법(등등)이 있다.두 프로 세 스(또는 스 레 드)가 파이프 의 같은 끝 을 동시에 읽 거나 기록 하려 고 시도 하면 파이프 의 데이터 가 손 상 될 수 있 습 니 다.물론 파이프 의 다른 단 을 동시에 사용 하 는 과정 도 위험 하지 않다.
파이프 끝 을 나타 내 는 커 넥 션(conn 1,conn 2)대상 을 되 돌려 줍 니 다.
Duplex 가 True(기본 값)라면 파 이 프 는 양 방향 입 니 다.
Duplex 가 False 라면 파 이 프 는 단 방향 입 니 다.conn 1 은 메 시 지 를 받 을 수 있 고 conn 2 는 메 시 지 를 보 낼 수 있 습 니 다.

#- * -coding: utf - 8 - * -
  from multiprocessing
import Process, Pipe

def f(conn):
  conn.send([42, None, 'hello'])
while True:
  print(conn.recv())

if __name__ == '__main__':
  parent_conn, child_conn = Pipe()
p = Process(target = f, args = (child_conn, ))
p.start()
print parent_conn.recv()# prints "[42, None, 'hello']"
parent_conn.send('666')
p.terminate()
출력:

[42, None, 'hello']
666

Process finished with exit code 0
총결산
이상 은 python 다 중 프로 세 스 가 프로 세 스 간 통신 인 스 턴 스 를 실현 하 는 모든 내용 입 니 다.도움 이 되 기 를 바 랍 니 다.관심 이 있 는 친 구 는 본 사 이 트 를 계속 참조 할 수 있 습 니 다.
Python 프로 그래 밍 개미 떼 알고리즘 상세 해석 실현
python 포환 의 운행 궤적 코드 공유
Python 에서 turtle 그림 예제
부족 한 점 이 있 으 면 댓 글로 지적 해 주세요.

좋은 웹페이지 즐겨찾기