반응형
저는 일반적으로 Python 및 다중 스레드 프로그래밍을 처음 접합니다. 기본적으로 파일을 다른 위치로 복사하는 스크립트가 있습니다. 스크립트가 아직 실행 중임을 나타 내기 위해 ....
를 출력 할 수 있도록 다른 스레드에 배치하고 싶습니다.
내가 가진 문제는 파일을 복사 할 수 없으면 예외가 발생한다는 것입니다. 메인 스레드에서 실행하는 경우 괜찮습니다. 그러나 다음 코드는 작동하지 않습니다.
try:
threadClass = TheThread(param1, param2, etc.)
threadClass.start() ##### **Exception takes place here**
except:
print "Caught an exception"
스레드 클래스 자체에서 예외를 다시 던지려고했지만 작동하지 않습니다. 나는 여기에있는 사람들이 비슷한 질문을하는 것을 보았지만 그들은 모두 내가하려는 것보다 더 구체적인 것을하는 것 같다 (그리고 나는 제공되는 해결책을 이해하지 못한다). 사람들이 sys.exc_info ()
의 사용법을 언급하는 것을 보았지만 어디서 어떻게 사용하는지 모르겠습니다.
모든 도움에 감사드립니다!
수정 : 스레드 클래스의 코드는 다음과 같습니다.
class TheThread(threading.Thread):
def __init__(self, sourceFolder, destFolder):
threading.Thread.__init__(self)
self.sourceFolder = sourceFolder
self.destFolder = destFolder
def run(self):
try:
shul.copytree(self.sourceFolder, self.destFolder)
except:
raise
해결 방법
문제는 thread_obj.start ()
가 즉시 반환된다는 것입니다. 생성 한 자식 스레드는 자체 스택과 함께 자체 컨텍스트에서 실행됩니다. 여기서 발생하는 모든 예외는 자식 스레드의 컨텍스트에 있으며 자체 스택에 있습니다. 이 정보를 부모 스레드에 전달하기 위해 지금 생각할 수있는 한 가지 방법은 일종의 메시지 전달을 사용하는 것입니다.
크기를 위해 이것을 시도하십시오 :
import sys
import threading
import Queue
class ExcThread(threading.Thread):
def __init__(self, bucket):
threading.Thread.__init__(self)
self.bucket = bucket
def run(self):
try:
raise Exception('An error occured here.')
except Exception:
self.bucket.put(sys.exc_info())
def main():
bucket = Queue.Queue()
thread_obj = ExcThread(bucket)
thread_obj.start()
while True:
try:
exc = bucket.get(block=False)
except Queue.Empty:
pass
else:
exc_type, exc_obj, exc_trace = exc
# deal with the exception
print exc_type, exc_obj
print exc_trace
thread_obj.join(0.1)
if thread_obj.isAlive():
continue
else:
break
if __name__ == '__main__':
main()
참조 페이지 https://stackoverflow.com/questions/2829329
반응형
'파이썬' 카테고리의 다른 글
파이썬 Python subprocess.Popen () 완료 대기 (0) | 2020.11.30 |
---|---|
파이썬 스니핑 된 각 패킷에 대해 작업을 트리거하는 Scapy 패킷 스니퍼 (0) | 2020.11.30 |
파이썬 Python Sets vs Lists (0) | 2020.11.30 |
파이썬 여러 독립 변수가있는 Python curve_fit (0) | 2020.11.30 |
파이썬 Parse HTML via XPath (0) | 2020.11.30 |
댓글