문제

Helllo, 파이썬과 프로세스 사이에 소량의 데이터 (<1k)를 공유하고 싶습니다. 데이터는 물리적 PC/104 IO 데이터로 빠르고 종종 변화합니다 (24x7x365). 데이터를 작성하는 단일 "서버"가 있습니다. 이 시스템에서 실행되는 시스템은 하드 드라이브가 아닌 플래시 메모리 (CF 카드)를 사용하므로 파일 기반 체계로 플래시 메모리를 착용하는 것이 걱정됩니다. 또한 100% 태양열 전원이됨에 따라 더 적은 전력 (프로세서 시간)을 사용하고 싶습니다.

  • 이것이 유효한 걱정입니까? CF 카드를 SSD로 변경할 수 있습니다.
  • MMAP를 사용하여 값을 변경하면 데이터를 디스크에 물리적으로 작성합니까? 아니면 가상 파일입니까?
  • 우리는 데비안에서 실행할 것이므로 아마도 Python 모듈 용 POSIX IPC가 최상의 솔루션 일 것입니다. 누구든지 그것을 사용한 사람이 있습니까?
  • 누구든지 시도 했습니까? 파이썬 개체 공유 (posh) 기준 치수? 언뜻보기에는 유망 해 보이지만 "알파"에 있으며 적극적으로 개발되지 않은 것 같습니다.

감사합니다

업데이트 : 최대 데이터 업데이트 속도를 약 10Hz로 느리게했지만 더 일반적으로 1Hz. 클라이언트는 지속적인 업데이트 속도가 아닌 값이 변경 될 때만 통보됩니다. 우리는 각 서버가 특정 유형의 기기 또는 기능을 전문으로하는 여러 서버/다중 클라이언트 모델로 이동했습니다. 대부분의 프로그래밍이 Java 프로그래머에 의해 수행 될 것으로 판명되었으므로 TCP를 통해 JSON-RPC를 사용했습니다. 서버는 Java로 작성되지만 여전히 Python 및 AM 조사 JSON-RPC 구현에 주요 클라이언트를 작성하고 싶습니다.

도움이 되었습니까?

해결책

서버 프로세스에서 파일에 데이터를 작성하는 대안은 클라이언트 프로세스에 직접 작성하는 것일 수 있습니다.

Unix 도메인 소켓 (또는 클라이언트가 다른 기계에서 실행되는 경우 TCP/IP 소켓)을 사용하여 각 클라이언트를 서버에 연결하고 서버가 해당 소켓에 쓰기하도록합니다. 특정 처리 모델에 따라 클라이언트/소켓을 선택하는 것은 서버 (예 : 라운드 로빈) 또는 클라이언트가 더 많은 준비가된다는 신호를 통해 수행 될 수 있습니다.

다른 팁

RAMFS 파티션을 만들고 그것에 쓰십시오. (TMPF를 사용할 수는 있지만 TMPF와 달리 RAMF는 디스크로 교체되지 않습니다). 그러나 RAMF는 크기 제한이 없으므로 메모리가 부족하지 않도록주의해야합니다. 약간의 데이터 만 쓰기 때문에 문제가되지 않아야합니다.

이렇게하면 데이터가 디스크에 기록되지 않습니다 (참고 : 전원이 실패하면 손실됩니다).

RAMFS 문서도 참조하십시오.

에 따르면 MMAP 시스템 호출에 관한 Wikipedia 기사, 메모리 매핑 파일 내용 디스크에 다시 작성됩니다 업데이트 될 때.

다중 프로세싱 모듈 (표준 라이브러리), 특히 프로세스 간 부분을 공유하는 부분을 살펴 보셨습니까?

PiskVor가 언급 한 RAMF는 또한 좋은 솔루션처럼 보입니다. 특히 모든 프로세스가 Python으로 작성되는 것은 아닙니다.

플래시 시스템에서 실행될 때 파일 시스템이 플래시 메모리의 수명을 최대화하기 위해 올바르게 설계되었는지 확인하십시오 (마모 레벨링). JFFS 그리고 나는 다른 사람들이 이제 효과적으로이를 수행 할 수 있다고 생각합니다. 이러한 시스템을 사용하는 경우 플래시 사용에 지나치게 걱정해서는 안되지만 확실히 일정한 데이터 스트림을 작성하는 경우 플래시에서이를 피하고 싶습니다.

RAM 파일 시스템을 사용하는 것이 좋습니다. 더 나은 것은 시스템 설계가 당신을 허락 할 경우 파일 시스템을 완전히 피하는 것입니다. 이를 위해 당신은 posh를 언급합니다. 나는 그것을 시도한 적이 없지만 우리는 찾았습니다 파이로 ( "Python Remote Objects") 일부 유사한 경우에 우아하고 효과적인 솔루션이 되십시오.

물론 표준 라이브러리가 있습니다 multiprocessing 프로세스간에 의사 소통하는 방식과 관련하여 일부 유사점을 갖는 모듈. 나는이 분야의 새로운 개발을 시작했고, 팬이 실패한 경우에만 다른 곳으로갑니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top