2009-03-19 3 views
2

모니터가 정보를 읽는 동시에 응용 프로그램에 정보를 쓰게하고 싶습니다. 응용 프로그램은 "임베디드"(Win32 XP)이므로 메모리와 I/O 기능이 제한되어 있습니다.하나의 파일을 버퍼로 사용할 수 있습니까? 나는. 동시에 쓰고 읽을 수 있습니다.

내가 생각하는 가장 간단한 방법은 응용 프로그램의 버퍼 파일에 데이터를 쓰고 모니터 응용 프로그램을 사용하여 동일한 파일을 읽는 것입니다. 작성기 응용 프로그램은 C++이며 독자는 현재 Win32 XP의 Python입니다.

이 작업을 수행 할 라이브러리가 있습니까? 아무도 이것을 보지 못했습니까?

나는 applcation에서 데이터베이스 라이브러리에 링크하고 싶지 않기 때문에 데이터베이스를 사용하고 싶지 않습니다. 나는. 공간이 없으며 임베디드 플랫폼에서 지원되지 않을 수 있습니다.

이 작업을 수행하는 또 다른 방법은 네트워크 연결이지만 그림 파일은 가장 간단한 방법입니다.

+0

어떤 OS입니까? 유닉스에는 이런 일을하는 파이프가있다. 파이썬에는이 작업을 수행하는 대기열이 있습니다. –

+0

감사합니다. OS가 추가되었습니다. 문제는 여러 플랫폼에서 실행되는 임베디드 응용 프로그램이므로 일치하는 파이프가 없습니다. 파일을 사용하기위한 좋은 트릭이 있는지 궁금해서 소켓을 사용해야 할 수도 있습니다. – Nick

+0

소켓이 최선의 방법이라고 생각합니다. 디스크는 _really_ 느린 I/O 시스템입니다. – cobbal

답변

4

대부분의 시스템에는 파이프 및 유닉스 소켓과 같이 사용자가 원하는 작업에 대한 여러 가지 솔루션이 있습니다. 이것들은 일반 파일과 달리 이것을위한 것입니다. 그러나 일반 파일에는이 작업을 수행하는 프로그램이 있습니다. 가장 명백한 예는 파일을 "따라갈 수있는"유닉스 유틸리티 테일입니다.


http://msdn.microsoft.com/en-us/library/aa365590(VS.85).aspx

파이썬에서 Win32에 대한 좋은 랩퍼 라이브러리를 가지고 한 번 봐, 그래서 아무것도 당신은 아마 파이썬에서 액세스가있을 수 있습니다 참조하십시오.

+0

감사합니다. Emil. 파이프의 속도가 소켓과 어떻게 비교되는지 알고 있습니까? – Nick

+0

나는 파이프가 상당히 빠르다고하는 희미한 기억을 가지고 있지만, 그것에 대해서는 내기하지 않을 것이다. 그것은 논리적으로 보입니다. 프로젝트에 행운을 빌어 요! :) –

+0

파이프는 공유 메모리 버퍼입니다. localhost를 통해 연결된 소켓도 메모리 버퍼에서 공유됩니다. 파이프의 오버 헤드는 약간 적습니다. –

1

당신이 말하는 것은 "프로세스 간 의사 소통"입니다. 이 작업을 수행하는 데는 여러 가지 방법이 있습니다.

유닉스 파이프 사용.

https://docs.python.org/library/pipes.html

사용하여 소켓.

https://docs.python.org/library/socket.html

사용하여 큐.

https://docs.python.org/library/queue.html

이들의 모든 파일 I/O보다 낫다.

+0

다른 프로세스간에 큐가 작동하지 않습니다. – bialix

+0

@bialix : 고마워. 큐 자체는 솔루션이 아닙니다. 하지만 훌륭한 솔루션은 소켓, 대기열 및 wsgi_ref를 사용하여 만들 수 있다고 생각합니다. –

2

mmap이라는 표준 파이썬 모듈 인 메모리 매핑 파일을 사용할 수 있습니다.

관련 문제