나는 누군가가 약간의 빛을 발할 수 있기를 희망하는 이상한 문제가있다.패키징 및 mayavi와 관련된 Python 교착 상태가 발생합니까?
스크립트로 가득 찬 디렉토리로 시작한 복잡한 코드 조각이있어서 패키지로 다시 작업하기로 결정했습니다. 이 코드 변경은 이상한 교착 상태가 나타나는 원인이 된 것으로 보입니다.
다음은 문제의 표준 재생산을 시도한 것입니다. 이 코드는 예상대로 실행된다는 의미에서 실패합니다. 실제로 문제를 재현하려면 많은 코드가 필요할 수 있습니다. 하지만 상황에 맞지 않는 코드 스 니펫과 다른 점은 상상할 수 없습니다.
import numpy as np
from scipy.sparse import csr_matrix
from threading import Thread
def dummy():
print 'this is printed'
I = np.eye(3)
print 'all is still fine'
csr_matrix(I)
print 'this is never printed; csr_matrix appears to be a trigger for deadlock'
print np.ones(4)
print 'same problem; somehow, printing ndarrays is no longer cool either'
thr = Thread(target=dummy)
thr.start()
아마도이 간결한 주석은 관련되어 있을까요? 나는 완전히, 우선 여기에 주요 모듈 이외의
http://docs.python.org/2/library/threading#importing-in-threaded-code 말했다되는 내용하지 않도록 감사하고, 수입은 해당 스레드를 기다리는 다음 새 스레드를 산란과의 부작용이 없어야합니다 어떠한 방식으로. 생성 된 스레드가 직접 또는 간접적으로 모듈 가져 오기를 시도하면이 제한 사항을 준수하지 못하면 교착 상태가 발생할 수 있습니다.
일부 컨텍스트 : 나는이 스레드를 mayavi/traitsui 스레드에서 생성하려고하는 python 2.7, numpy 1.8을 사용하고 있습니다. (관련성이 있어야하는 이유와 패키지 전에 잘 작동하는지 보지 않습니다. 구조,하지만 좋아). 또한, 생성 된 스레드에는 numpy/scipy 코드의 보트로드가있어 완벽하게 정상적으로 실행됩니다. 그것의 방금 인쇄 ndarrays 및 교착 상태에 대한 트리거로 입증 된 희소 행렬을 만드는.
mayavi 창이 닫히면 모든 교착 상태의 스레드가 다시 실행되기 때문에 mayavi와 약간의 상호 작용이 의심됩니다. 아마도 이러한 특정 명령문은 파이썬 스레드를 다시 mayavi 스레드로 반환하도록 트리거하지만 어떻게 든 포커스를 다시 얻지 못합니다.
이 수수께끼를 더 좁히는 데 도움이되는 힌트는 대단히 감사하겠습니다!
문제는 아마도 여기에서 재현하지 않은 코드의 세부 사항과 관련이 있기 때문에 말하기는 어렵습니다. 이 쓰레드를'join()'하고 있습니까? 당신이 우리에게 준 예제에서와 같이 모듈의 최상위 레벨에서 시작 했습니까? 이 두 가지를 모두 수행한다면 문서의 주석에 따라 수행하지 말라고 말하는 것입니다. 모듈의 코드가 실행되는 동안 보유되는 전역 가져 오기 잠금이 있습니다. 그런 식으로'csr_matrix() '를 호출하면 가져 오기가 일어나므로 가져 오기 잠금을 획득하려고 시도합니다. 교착 상태가 발생합니다. 그러지 마. –
도움에 감사드립니다. 이것이 내가 문서를 이해 한 방법이다. 그러나 나는 그 일을하지 않고있다. 나는 아무데도 합류하지 않는다. 아마 mayavi는 장면 뒤에서 어딘가에서 않습니다; 그러나 그것은 문서가 경고하는 것이 아닙니다.스레드는 사용자 입력에 대한 응답으로 UI 객체의 메서드에서 시작됩니다. 또한 csr_matrix는 오랫동안이 시점에서 다른 곳으로 가져 왔습니다. 캐시되어야하므로 가져 오기 잠금이 여전히 작동합니까? –
또한; csr_matrix와 ndarray .__ repr__을 특별하게 만드는 것에 대한 단서가 있습니까? 왜 내 스레드가 코드를 통해 행복하게 행진합니까? 수확량이 희박하고 수입이 많지만,이 두 가지 기능 중 어느 것을 호출하든간에 일관되게 붙어 있습니까? –