2010-03-19 4 views
4

나는 fifo 파일 (주로 라이너 하나)에서 메시지를 읽은 후 일종의 멀티 프로토콜 봇 (jabber/irc)을 작성하려고합니다. irc 채널 및 jabber 연락처. 지금까지 jabber와 irc에 연결하기 위해 두 개의 공장을 만들었고, 그들은 작동하고있는 것으로 보입니다.파이썬 (꼬임) - FIFO에서 읽기 및 여러 프로토콜로 읽기 데이터 보내기

그러나 fifo 파일을 읽는 데 문제가 있습니다. 원자로 루프 바깥에서 루프 (열린 파일, 읽은 행, 닫는 파일, 열린 파일로 이동)에서 읽는 방법을 모르겠습니다. 보내야 할 데이터를 얻은 다음 두 프로토콜을 전송하기 위해 해당 데이터를 원자로 루프로 가져옵니다. 나는 최선의 방법으로 그것을하는 방법에 대한 정보를 찾고 있었지만 Im은 완전히 어둠 속에서 길을 잃었다. 모든 제안/도움이 매우 감사하겠습니다.

미리 감사드립니다.

답변

1

fifo가 문제입니다. 대신 소켓에서 읽으십시오. 이것은 Twisted event-driven model에 대한 정보를 훨씬 잘 맞출 것입니다. 원자로를 통제 할 수없는 일을하려는 시도는 대개 잘못된 접근법입니다.

---- 업데이트는 FIFO가 외부 제약, 피할 수없는 ----

OK라고 의견에 따라, 중앙 문제는 메인 (만) 스레드에서 코드를 작성할 수 없다는 것입니다 귀하의 트위스트 애플 리케이션의 FIFO에 대한 읽기 호출을 차단합니다. 읽을 것이 없다면 앱 전체가 멈추게됩니다. 따라서 fifo를 비동기 적으로 읽거나 별도의 스레드를 만들어 읽거나 두 개로 앱을 분할하려고합니다.

마지막 옵션은 가장 단순합니다. Twisted 응용 프로그램을 수정하여 소켓에서 청취하고 간단한 루프에서 실행되는 작은 "전달자"응용 프로그램을 작성하고, FIFO를 읽고 소켓에서 듣는 모든 것을 쓰도록합니다.

+0

문제는 데이터 소스를 제어 할 수 없다는 것입니다. 그것은 fifo 형태로 제공되었으며 이것이 내가해야 할 일입니다. 그 데이터를 얻을 수있는 다른 방법이 없다면 물어볼 수도 있습니다. 그러나 대답을 얻을 때까지, 그 FIFO를 물어볼 것입니다. – SpankMe

3

소켓이 파일 디스크립터를 사용하지 않는 방식으로 반응기를 차단하지 않고 파일 설명자를 읽고 쓸 수 있습니까?

twisted.internet.interfaces.IReadDescriptor을 구현하는 클래스를 만들고 twisted.internet.interfaces.IReactorFDSet.addReader을 사용하여 반응기에 추가하십시오. IReadDescriptor 구현 예는 twisted.internet.tcp.Connection을 참조하십시오.

나는 내 자신이 한 적이 없기 때문에 더 구체적 일 수는 없지만 이것이 출발점이 될 수 있기를 바랍니다.