2014-11-24 3 views
0

기본 예/아니오 질문을 시도하는 중 - 나는 두려워하는 대답이 "아니오"이지만 - "예"일 경우 어떻게해야하는지에 대한 지침을 구합니다!파이썬 트위스티드 원자로는 파이썬 프로세스에서 공유됩니까?

Twisted Python으로 작성된 SMTP 서버가 있습니다. 그것은 아주 잘 작동합니다! 기본 흐름/기능의 순서가 호출이 뭔가 같은 : 나는 하나 이상의 별도의 파이썬 스크립트에서 수행하고자하는 (물론, 실제로는 RobotFramework됩니다 테스트,하지만 주체가 동일) 무엇

script1.py 
from mailserver import startReactor, startListener, stopListener, stopReactor 
startReactor() 
startListener("p25") 
startListener("p26") 
# Handle incoming connections etc until sigint receivedand then exit cleanly 
stopListener("p25") 
stopListener("p26") 
stopReactor() 

입니다 :

script2.py 
from mailserver import startReactor, startListener, stopListener, stopReactor 
startListener("p27") 
# Handle incoming connections etc until all necessary stuff on p27 is complete 
stopListener("p27") 

그리고 마지막으로

그래서 아이디어는 script1.py 실행 listene의 목록을 "변화", script3 등을 실행 할 수있다, 백그라운드에서 실행하고 script2입니다
script3.py 
from mailserver import startReactor, startListener, stopListener, stopReactor 
stopListener("p25") 
startListener("p25custom) 
# Handle incoming connections etc until all necessary stuff on "custom" p27 is complete 
stopListener("p25custom") 
startListener("p25) 

rs하지만 이러한 리스너가 script1의 반응기에 연결되어 있습니다.

ps -xaf 및 netstat를 모니터링하여 모든 스크립트에서 소켓 열기를 볼 수 있으며 script1은 정상적으로 종료되지만 script2에서 열린 소켓 and script3 do not close down ...

나는 "runningListeners"(예 : {'p25': <<class 'twisted.internet.tcp.Port'> of mailserver.ConsoleSMTPFactory on 25>})를 추가/삭제하여 startListener와 stopListener를 적절히 호출하는 것을 명심하고 있습니다. 그러나 이것은 분명히 script1에만 국한되어 있으며 3 개의 스크립트 사이에 "공유 된"dict가 아닙니다 ... 그리고 script2에서 시작된 청취자와 script3은 실제로 script1에서 netstat으로 시작된 반응기에 "부착"되어 있음을 매우 의심합니다./ps는 제안 할 수 있습니다. 그리고 아마도 "사용 가능한"청취자가 아닙니다. ...

그렇기 때문에 질문이 없습니다. 여러 개의 파이썬 스크립트로 수행하려는 작업을 수행 할 수 있습니까? 그렇다면 누구나 할 수 있습니다. 어떻게이 일을 성취 할 수 있는지 제안 해주세요.

많은 감사!

+0

"프로세스간에 반응기를 공유 할 수 있습니까?"라는 질문에 대한 대답은 "아니오"입니다. 그러나, 나는 * 당신이'spawnProcess'를 사용하여 무엇을 하려는지를 생각할 수있는 방법이 있다고 생각합니다 - 당신이 실제로 "다중 스크립트"를 실행함으로써 당신이 실제로 달성하고자하는 것이 무엇인지 알아 내지 못합니다 넣어. 왜 주 프로그램에서 모든 것을 동시에 실행하지 않습니까? – Glyph

+0

안녕하세요 @ 글리프 ... 나는 많이 두려워했습니다. 우리가 할 수있는 일은 script1에서 "기본"청취자 (p25)를 실행하는 것입니다. 그런 다음 필요에 따라 추가 리스터를 시작하고 중지합니다. 그것을 얻는 방법뿐만 아니라, 싶다 ;-) 건배! –

+0

"reactor"라는 단어를 사용하지 않고 원하는 것을 설명 할 수 있습니까? 여러 개의 원자로를 시작하고 중지하지 않고도 추가 * 리스너 *를 시작하고 중지하는 것이 매우 간단하기 때문입니다. – Glyph

답변

0

하나의 해결 방법은 하나의 단일 트위스트 반응기를 실행하도록 script1을 '더 똑똑하게'만드는 것일뿐 아니라 다른 시스템에서 전송 된 맞춤형 '지침'을 위해 파일 시스템이나 네트워크를 모니터링하는 추가 폴링 코드를 실행하게하는 것입니다 두 개의 스크립트.

다른 두 스크립트의 지시 사항은 listen 할 포트 (예 : 수신 대기 할 포트 및 이벤트가 발생할 때 실행해야하는 핸들러 코드, 가능하면 서브 프로세스 모듈을 사용하여 위임)에 대해 script1에 지시합니다. 청취자가 언제 중단되어야 하는지를 나타냅니다.

저는 답변이 erm yes라고 생각합니다.하지만 쉽지 않으므로 먼저 디자인을 다시 생각해 볼 수 있습니다.