
repl을 시작하는 데 오랜 시간이 걸린다고 가정해 보겠습니다 python
. 별칭을 만들고 python-current "command to run"
.
답변1
파이썬 배포판에는 '배터리 포함'을 허용하지 않는 이런 종류의 열기 작업이 없습니다.
편집기와 같은 프로그램이 그런 종류의 일을 처리할 수 있는 이유는 다른 파일을 열 때 무엇을 해야 할지 매우 명확하기 때문입니다. 동일한 실행 파일에 의해 처리되는 새 파일에서 창/탭을 열면 됩니다.
이와 같은 것을 직접 구현하는 것은 그리 어렵지 않지만 첫 번째 명령이 아직 완료되지 않았고 두 번째 명령이 예정되어 있을 때 어떤 일이 발생하는지 생각해야 합니다.
- 첫 번째 명령을 중단
- 두 번째 명령을 대기열에 넣습니다.
- 병렬로 실행(명령을 기다리는 스레드가 여러 개 있지 않으면 추가 시작 시간이 필요함)
스캔된 디렉터리의 파일, http 요청(트위스트 기반 시스템) 및 zeromq를 기반으로 모듈을 로드하고 실행하기 위해 Python을 실행하도록 알렸습니다. 무엇이 적절한지는 IMHO에 따라 시스템에 무엇이 필요한지에 따라 다르며, 나는 항상 작동하고 오버헤드가 가장 적은 것을 선택합니다. python-current
적절한 인터페이스를 수행해야 합니다 .
종종 이는 특정 모듈을 다시 로드하는 것과 결합되었습니다(새 명령에 대한 처리를 얻기 위해). 이를 위해 reload()
내장된 기능을 사용할 수 있습니다 :
import mycommand
# test for a command that requires reloading
reload(mycommand)
여담: 특히 UI 코드를 사용할 때 이 다시 로드가 유용하다는 것을 알았습니다. 실행 파일의 Python 로딩은 Perl과 비슷합니다(몇 년 전 시스템에서는 0.002초
time python -v
). 기본 모듈을 로드하는 데 약 10배 더 오래 걸립니다( time python -c "exit();", 0.025s). But when using UI based programs the whole startup easily grows to several seconds and more. And in that case implementing dynamic command reading and having a
python-current`가 의미가 있습니다.
답변2
당신이 사용한다면 bash
시도해 볼 수 있습니다공동 프로세스. Ksh도 있어요공동 프로세스, 두 쉘 모두 이 영역에서 동일한 기능을 가지고 있는지 확실하지 않습니다. 저는 Ksh 버전만 사용해 보았는데(제 고용주는 klunk를 좋아해서 우리는 Ksh를 사용했습니다) 효과가 있었지만 단일 코프로세스 이상을 사용하는 것은 쉽지 않았습니다.
Google에서 "ksh coprocess example" 또는 "bash coprocess example"을 검색하면 예제 코드를 찾을 수 있습니다. 모든 것이 매우 직관적이지 않기 때문에 예제를 통해 작업하십시오.