2012-09-10 10 views
0

나는 python 스크립트의 두 프로세스간에 안전하게 정보를 전달하는 방법을 찾고있다.파이썬에서 하나의 읽기와 쓰기 프로세스 사이에서 통신하기

하나의 프로세스는 읽기 전용이고 다른 프로세스는 읽기 전용입니다. 전달해야하는 데이터는 사전입니다.

가장 좋은 해결책은 로컬 SQL 서버 (데이터 그 자체가 일종의 테이블이기 때문에)이며 SQLite가 트랜잭션을 안전하게 처리한다고 가정합니다.

파일을 쓰는 동안 읽지 못하도록 잠금하는 더 좋은 방법이 있습니까? 그 반대도 마찬가지입니까?

저는 Linux 우분투 11.10을 사용하고 있지만 크로스 플랫폼 솔루션을 환영합니다.

+0

소켓을 사용해 보셨습니까? 또는 [ØMQ] (http://www.zeromq.org/)일까요? 필자는 정보 전달이 파일 잠금과 어떻게 관련되어 있는지 이해하지 못합니다. –

+0

소켓을 사용하고 싶지 않습니다. 구현이 과잉 인 것처럼 보입니다. – eran

+0

필자가 전달해야하는 데이터는 큰 사전이므로 데이터베이스에 쓰는 것을 고려하여 모니터링하기 쉽도록했습니다. 소켓은 또 다른 고려 가치가 있습니다. 감사. – eran

답변

1

단방향 통신의 경우 예를 들어 다음과 같이 사용할 수 있습니다. multiprocessing.Queue 또는 multiprocessing.queues.SimpleQueue

또한 공유 메모리는 multiprocessing.Array을 사용하는 옵션입니다. 그러나 적어도 두 개의 배열 (키와 값)으로 사전을 분리해야합니다. 모든 값이 동일한 기본 유형 인 경우에만 유효합니다.

multiprocessing.Queuemultiprocessing.Array에 대한 좋은 점은 둘 다 내부적으로 잠금에 의해 보호된다는 점이므로 걱정할 필요가 없습니다.

3

프로세스간에 데이터를 전송하려면 pipessockets을 사용할 수 있습니다. Python은 pickling을 사용하여 객체와 바이트 스트림 사이를 변환합니다.

데이터를 안전하게 전송하려면 데이터가 정확히 전송되었는지 확인해야합니다. 즉, 대상 프로세스에서 "모든 것을 얻지는 못했지만 다시 보내십시오"라고 말할 수 있어야합니다. 송신자가 영수증을 필요로합니다.

이렇게하려면 고유 한 키 (타임 스탬프 또는 해시 일 수도 있음)를 제공하는 "헤더"를 데이터에 추가해야합니다. 그러면 수신자와 발신자는 데이터를 두 번 처리하지 않도록 보내거나 보았던 목록을 보관할 수 있습니다.

관련 문제