상황을 상상해 봅시다. 두 개의 Python 프로그램이 있습니다. 첫 번째는 컴퓨터 메모리에 일부 데이터 (str)를 쓰고 종료합니다. 그런 다음 첫 번째 프로그램에서 저장 한 메모리 내 데이터를 읽는 두 번째 프로그램을 시작합니다.파이썬에서 메모리 읽기/쓰기
이것이 가능합니까?
상황을 상상해 봅시다. 두 개의 Python 프로그램이 있습니다. 첫 번째는 컴퓨터 메모리에 일부 데이터 (str)를 쓰고 종료합니다. 그런 다음 첫 번째 프로그램에서 저장 한 메모리 내 데이터를 읽는 두 번째 프로그램을 시작합니다.파이썬에서 메모리 읽기/쓰기
이것이 가능합니까?
일단 첫 번째 프로그램이 종료되면 메모리가 완전히 사라집니다.
디스크에 기록해야합니다.
사실, 메모리 기반 파일 시스템이 존재합니다 (적어도 Linux에서는). 응용 프로그램은 파일에 쓰고 그 파일은 메모리에 있습니다 :)하지만 그게 Honza가 의도 한 것입니다. – extraneon
데이터베이스 (예 : dbm, sqlite, shelve, pickle 등)를 사용하여 두 번째 프로그램에서 나중에 선택할 수있는 "메모리"에 데이터를 저장하십시오.
처음에는 컴퓨터 메모리에 (str)의 데이터 몇 개를 쓴 다음 을 종료합니다.
OS는 다른 프로그램이 볼 수 없도록하기 전에 모든 메모리를 0으로 만듭니다. 첫 번째 프로그램이 귀하의 은행 내역서를 처리했거나 귀하의 비밀번호를 가지고있을 수 있으므로 이것은 중요한 보안 조치입니다.
영구 저장소 (아마도 디스크)에 쓰기를해야합니다. (또는 램 디스크를 사용할 수도 있지만 실제 성능에는 아무런 차이가 없습니다.)
또는 두 가지 프로그램이있는 이유는 무엇입니까? 왜 두 가지 일을하는 하나의 프로그램이 아닌가?
사실, OS가 메모리를 명시 적으로 제로라고 생각하지 않습니다. 그래도 나는 잘못 될 수 있습니다. – SLaks
당신은 SLAKs가 맞습니다, 당신의 OS는 메모리를 제로화하지 않을 것입니다. 하지만 어쨌든 쓸모가 없도록 동일한 메모리를 확보 할 수는 없습니다. – Wolph
나는 혼란스러워하고 있다고 생각합니다. C 런타임이 OS에서 가져 오는 큰 메모리 덩어리가 있습니다. 이것은 지워 져야합니다 (일반적으로 0). 그렇지 않으면 OS 보안 취약성이 있습니다 (다른 사용자의 암호가 들어있는 메모리가 있다고 가정). 하지만 C 런타임에서 메모리를 요청할 때. 메모리가 0이 아닌 malloc()을 통해. 어떤 메모리를 malloc()하고 free()로 작성한 다음 malloc()을 다시 호출하고 같은 메모리 (같은 프로세스에서 남은 데이터가 들어있는)를 얻습니다. 여기서 Q는 이전 프로세스의 메모리를 볼 수 있는지 여부입니다. 당신은 할 수 없습니다. – user9876
일종의.
python p1.py | python p2.py
p1이 stdout에 쓰는 경우 데이터는 메모리로 이동합니다. p2가 stdin에서 읽으면 메모리에서 읽습니다.
문제는 "다음 두 번째 프로그램을 시작합니다"가 없다는 것입니다. 두 프로그램이 적절한 메모리 (이 경우 stdout과 stdin 사이의 버퍼)를 공유하도록 시작해야합니다.
예.
RAM 파일 시스템을 정의하십시오.
http://www.vanemery.com/Linux/Ramdisk/ramdisk.html
또한 영구 공유 메모리 영역을 설정하고 하나 개의 프로그램이 쓰기 그리고 읽기 다른를 가질 수http://www.cyberciti.biz/faq/howto-create-linux-ram-disk-filesystem/
당신은 ' 이를 수행 할 필요가있는 Linux 커널은 이미 공유 메모리를 지원합니다. –
. 그러나 그러한 것들을 설정하는 것은 근본적인 O/S에 어느 정도 의존적이다.
아마도 포스터는 공유 메모리 같은 것을 말하고 있을까요? 이것 좀 봐 : http://poshmodule.sourceforge.net/
이 모든 말도 안되는 대답은 무엇입니까? 물론 당신이 묻는대로 메모리를 공유 할 수 있습니다. usermode API가 부족하다는 것 외에는 메모리를 유지할 수없는 기술적 인 이유가 없습니다.
Linux에서는 공유 메모리 세그먼트를 사용할 수 있습니다. 공유 메모리 세그먼트는 프로그램을 삭제 한 후에도 유지됩니다. ipcs(1)
을 사용하여 보거나 편집 할 수 있습니다. 이들을 생성하려면 shmget(2)
및 관련 syscalls을 참조하십시오.
다른 방법으로 POSIX 공유 메모리를 사용할 수 있습니다. shm_overview(7)
this과 같은 Windows에서 할 수 있다고 가정합니다.
C 확장을 만들어야한다는 것을 잊어 버렸습니다 ... SWIG를 사용하면 Python C API를 사용하는 것과 비교하여 많은 시간을 절약 할 수 있습니다. 어쩌면 다른 사람이 제안한 것처럼 POSH를 체크 아웃해야 할 것입니다.하지만 내가 원하는대로 할 수 있는지 확실하지는 않습니다. –
메모리에 데이터를 쓰고 종료 하시겠습니까? 그 데이터가 두 번째 프로그램에 어떻게 신뢰할 수 있습니까? – YOU