2011-09-04 8 views
0

무한 루프가있는 메서드를 실행하여 비디오 디스플레이를 만들려고합니다. 이 메서드는 하드웨어 입력을 처리하는 다른 루프 내에서 호출되므로 비디오를 최대한 빨리 루프 할 수 없으므로 외부 루프를 사용하여 비디오를 실행하면 지연이 발생합니다. 비디오 루프를 시작한 다음 하드웨어 루프를 시작하고 별도로 실행하는 방법이 있습니까? 현재 비디오 루프를 호출하면 반환 될 때까지 루프에 그냥 앉아 있습니다.한 번에 여러 메서드 실행 파이썬에서

답변

2

예, 파이썬 자신의 threading 모듈 또는 gevent과 같은 협동 마이크로 스레딩 모듈을 사용할 수 있습니다. 파이썬의 스레딩 메커니즘이 CPython의이 면책 조항 (대부분의 상자에서 기본 파이썬 구현) 수행

참고 :

인해 글로벌 통역 잠금으로는, CPython과에 하나의 스레드 만도 (한 번에 파이썬 코드를 실행할 수 있습니다 특정 성능 위주의 라이브러리는 이러한 제한을 극복 할 수 있습니다). 응용 프로그램에서 멀티 코어 시스템의 전산 자원을보다 효율적으로 사용하려면 multiprocessing을 사용하는 것이 좋습니다. 그러나 다중 I/O 바인딩 작업을 동시에 실행하려면 스레딩이 여전히 적합한 모델입니다.

호출하는 기본 모듈의 작동 방식에 따라 threading을 사용하는 동안 한 스레드가 제어를 자주 포기하지 않을 수도 있습니다. 이 경우 협동 마이크로 스레딩을 사용하는 것이 유일한 옵션 일 수 있습니다.

+0

죄송합니다. 첫 번째 줄을 벗겨 내야했습니다. D –

1

예, 파이썬 자신의 multiprocessing 모듈을 사용할 수 있습니다.

다중 처리는 GIL과 싸울 필요가 없으며 사용자가 제공하는 모든 작업을 동시에 수행 할 수 있습니다.

반면에 다중 프로세스 모듈에 경고가 있습니다. 프로세스를 생성 할 때 완전히 별도의 파이썬 인터프리터입니다. 그래서 OS가 제어하는 ​​스레드가 아닙니다. 그것은 그 자체로 완전히 다른 과정입니다. 이것은 프로그램에 오버 헤드를 추가 할 수 있지만 GIL을 완전히 피하는 이점은이 점을 경미한 문제로 만듭니다.

+0

그래,이 방법도 효과가 있습니다. 그러나 사용해야하는 통신 메커니즘은 크로스 스레드가 아닌 교차 프로세스가되므로 각 프로세스가 자체 힙을 갖기 때문에 개체 공유만큼 간단하지는 않습니다. – cdhowie

관련 문제