문제

사용자는 Java Gui Python-Editor에서 Python 스크립트를 입력하고 편집기에서 실행할 수 있습니다. 사용자의 스크립트를 가져 와서 총 스크립트에 시간 제한을 부과하는 방법이 있습니까?

나는 functions / signal.alarm (그러나 Windows & Unix jython에 있습니다)을 사용하여 이것에 대한 방법에 익숙하지만, 제가 생각해 낸 유일한 솔루션은 해당 스크립트를 다른 스크립트에 세트를 사용하는 방법에 넣는 것입니다. () 함수이지만 글로벌 변수의 값이 지속되는 "기능"을 제거합니다. 즉.

try:
 i+=1
except NameError:
 i=0

'I'의 값은 모든 실행마다 1 증가합니다.

도움이 되었습니까?

해결책

a 스레딩 .TIMER 지정된 지연 (프로그램에 원하는 최대 기간) 후 별도의 스레드에서 함수를 실행하려면 해당 기능에서 thread.interrupt_main (모듈에 있습니다 thread, ~ 아니다 모듈에서 threading!) 메인 스레드에서 키보드 인터럽트 예외를 올리려면.

보다 견고한 접근법 (스크립트가 무분별 불가능한 비 파이썬 코드에 갇히게되는 경우 키보드 인터럽트를 무시할 수 있도록)은 "Watchdog 프로세스"를 스폰하여 필요한 경우 잘못된 스크립트를 매우 강력하게 죽이는 것입니다 (그렇게하십시오. 만큼 잘 위의 접근 방식은 위에서 사용하는 지연보다 조금 늦어서 스크립트에 소멸자, Atexit 기능 등을 실행할 수있는 기회를 제공합니다.

다른 팁

이것은 단지 추측 일이지만, 스레딩이나 멀티 프로세싱으로 랩핑할까요? 시간이 지나면 타이머 스레드를 죽이는 타이머 스레드가 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top