2013-07-05 2 views
0

나는 기본적으로이 작업을 수행하는 응용 프로그램이 일시 중지 된 잎 : do_things이 오류가 발생하는 경우OCI8 오류에 닫지 연결을 수행하고 응용 프로그램이 (가 중단)

queue = SizedQueue.new(2) 
Thread.new do 
    conn = OCI8.new(DSN) 
    cursor = conn.exec([a query]) 
    cursor.fetch { |rec| queue << rec } 
    queue << :queue_ended 
    cursor.close 
    conn.logoff 
end.tap { |t| t.abort_on_exception = true } 

until a = queue.pop == :queue_ended 
    do_things(a) 
end 

문제가 온다. 스레드가 중단되지 않는 것 같습니다. 필자가 oci8이라고 믿는 이유는이 코드가 다른 함수 세트/라이브러리로 실행되고 모든 것이 잘 되었기 때문입니다. 내가 연결이 열려 있기 때문에 OCI8이라고 생각하는 또 다른 이유는 스레드가 연결을 중단했다면 확실히 종료 되었습니까?

간혹 쿼리를 생성하기 위해 irb에서 KeyBoardInterrupt를 발생시키는 데 종종 문제가 있습니다.

사과해야 할 일이 많지 않으면 계속할 필요가 없습니다. 스레드를 사용하지 않고 문제를 재현 할 수 없으며 디버깅이 매우 어렵다는 것을 알고 있습니다.

N.B Ruby OCI8 (rb 1.9.3의 최신 버전 (2.1.5))을 사용하고 있습니다. 사전에 도움을

감사

답변

0
이이 문제가되지 않습니다, 또는 적어도 루비 2.0.0 발생하지 않습니다 밖으로 돌려

; 나는 왜 그런지 모르겠다.