2011-09-19 4 views
8

음, 내 마음에 처음으로 pydispatcher 또는 pubsub이 thread-safe인지 여부를 확인하는 방법이있었습니다. pubsub는 알아 내기 약간 까다 롭거나 복잡 할 수도 있지만 pydispatcher는 쉽게 이해할 수 있습니다. 그렇다면 파이썬 모듈이 thread-safe인지 아닌지 알아내는 방법을 알기 시작했습니다. 발견 적 방법?파이썬 모듈을 평가하는 방법은 스레드로부터 안전한지 여부입니다.

답변

1

이론적 인 관점에서 : 임의의 프로그램에 대해이를 수행하는 알고리즘이 없습니다. 그것은 halting problem과 같습니다.

사용 된 모듈을 검사하여 스레드로부터 안전한지 확인하십시오. 그러나 스레드 안전을 위해 모듈의 바이트 코드를 확인하는 일반적인 방법은 없습니다. http://effbot.org/zone/thread-synchronization.htm 를하거나 스레딩 방법을 포함 :

라이브러리 나 응용 프로그램이 안전한 스레드 인 경우 저자의 입력없이 결정하기위한
+1

그는 "어떤 발견 적 방법"이라면서 그는 정확하고 일반적인 해결책을 찾고 있다고 말하지 않았습니다. 나는 또한 그가 바이트 코드를 보면서 이야기하고 있는지 의심 스럽다. – agf

2

, 나는 동기화 스레드 메커니즘에 대한 보일 것 http://docs.python.org/library/threading.html 그러나

, 그 중 어느 것도 당신을 말할 것이다 스레드 안전 방식으로 API를 사용하는 방법. 실질적으로 어떤 것도 스레드 객체 내부에 채워질 수 있고 스레드 동기화 객체를 사용하여 전달 될 수 있습니다.

pubsub과 같은 경우 API를 래핑하고 클래스를 통해 독점적으로 통신하는 클래스를 만들 수 있습니다. 예를 들어 pubsub가 wx와 같은 스레드에 살면 API를 사용하여 메시지를 보내기위한 스레딩 API를 사용하여 메시지를 큐에 주입 할 수 있습니다. 그런 다음 pubsub 루프 또는 타이머가 대기열을 모니터링 할 수 있습니다. 그런 다음 메시지를 보냅니다. pubsub과 같은 것을 배치하는 것과 관련된 문제 중 하나는 폴링이 필요하다는 것입니다. 폴링이 타이머에 의해 수행되면 투명하게 만들 수 있습니다. 각 스레드는 pubsub가 해당 스레드에 상주하지 않으면 메시지를 수신 할 타이머를 할당해야합니다. 이것에 대한 좀 더 세련된 접근법이있을 수 있지만, 나는 그것들을 알지 못합니다.

관련 문제