Python 프로 세 스 간 통신 공유 메모리 상세 설명
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)
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.