Python 프로 세 스 간 통신 공유 메모리 상세 설명

이전 블 로 그 는 이름 파 이 프 를 통 해 프로 세 스 간 통신 을 어떻게 하 는 지 에 대해 서 는 windows 에서 이름 파 이 프 를 사용 하려 면 python 으로 windows api 를 조사 연구 해 야 한다 고 말 했다.너무 번 거 로 워 서 메모리 공유 방식 으로 이 루어 질 수 있 는 지 생각 했다.파 이 썬 에서 mmap 모듈 을 사용 하여 이 기능 을 실현 할 수 있 는 지 알 아 보 았 습 니 다.
Python 의 mmap 모듈 은 같은 일반 파일 을 매 핑 하여 공유 메모 리 를 실현 합 니 다.파일 이 프로 세 스 주소 공간 에 매 핑 되면 프로 세 스 는 메모리 에 접근 하 는 것 처럼 파일 에 접근 할 수 있 습 니 다.
그러나 mmap 는 Liux 와 windows 의 API 가 약간 다 르 기 때문에 구체 적 인 세부 사항 은 mmap 의 문 서 를 볼 수 있 습 니 다.
다음은 하나의 예 를 보 겠 습 니 다.
server.py
이 프로그램 은 test.dat 파일 을 사용 하여 메모 리 를 매 핑 하고 1024 바이트 의 크기 를 할당 하여 1 초 마다 메모리 정 보 를 업데이트 합 니 다.

import mmap
import contextlib
import time

with open("test.dat", "w") as f:
  f.write('\x00' * 1024)

with open('test.dat', 'r+') as f:
  with contextlib.closing(mmap.mmap(f.fileno(), 1024, access=mmap.ACCESS_WRITE)) as m:
    for i in range(1, 10001):
      m.seek(0)
      s = "msg " + str(i)
      s.rjust(1024, '\x00')
      m.write(s)
      m.flush()
      time.sleep(1)

client.py
이 프로그램 은 위 에 비 친 파일 test.dat 에서 데 이 터 를 메모리 에 불 러 옵 니 다.

import mmap
import contextlib
import time

while True:
  with open('test.dat', 'r') as f:
    with contextlib.closing(mmap.mmap(f.fileno(), 1024, access=mmap.ACCESS_READ)) as m:
      s = m.read(1024).replace('\x00', '')
      print s
  time.sleep(1)

위의 코드 는 Liux 와 windows 에서 실 행 될 수 있 습 니 다.왜냐하면 우 리 는 test.dat 파일 을 사용 하여 메모 리 를 매 핑 하 는 것 을 명확 하 게 지정 하 였 기 때 문 입 니 다.만약 우리 가 windows 에서 공유 메모리 만 실현 한다 면 사용 할 파일 을 지정 하지 않 고 tagname 을 지정 하여 표시 할 수 있 기 때문에 위의 코드 를 간소화 할 수 있 습 니 다.다음 과 같다.
server.py

import mmap
import contextlib
import time

with contextlib.closing(mmap.mmap(-1, 1024, tagname='test', access=mmap.ACCESS_WRITE)) as m:
  for i in range(1, 10001):
    m.seek(0)
    m.write("msg " + str(i))
    m.flush()
    time.sleep(1)

client.py

import mmap
import contextlib
import time

while True:
  with contextlib.closing(mmap.mmap(-1, 1024, tagname='test', access=mmap.ACCESS_READ)) as m:
    s = m.read(1024).replace('\x00', '')
    print s
  time.sleep(1)

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기