10

API를 호출하는 스크립트가 있습니다. 스크립팅 속도를 높이기 위해 스레딩을 구현하려고했습니다.치명적인 파이썬 오류 : PyImport_GetModuleDict : 모듈 사전이 없습니다.

아래의 스크립트는 IDLE에있을 때 작동하지만 명령 줄에서 sys argv를 사용하여 실행하려고하면 아래에 나열된 두 가지 유형의 오류가 발생합니다.

오류 1

Fatal Python error: PyImport_GetModuleDict: no module dictionary! 

This application has requests the Runtime to terminate it in an unusual way. Please   contact the application's support team for more information. 

오류 2

Exception in thread Thread-1 (most likely raised during iterpreter shutdown): 
Exception in thread Thread-2 (most likely raised during iterpreter shutdown): 
Exception in thread Thread-3 (most likely raised during iterpreter shutdown): 
Exception in thread Thread-5 (most likely raised during iterpreter shutdown): 

나는 이러한 오류에 아무것도 찾을 수 없습니다. 그래서, 어떤 도움을 주셔서 감사합니다. 아래는 스레딩을 다루는 스크립트 부분입니다.

import threading 
import diffbot 

urls = [[example.com],[example2.com]] 
data = [] 

def getData(url): 
     x = diffbot.classify(url) 
    data.append(x) 


def doWork(urls): 
    for element in urls: 
     for url in element: 
      t = threading.Thread(target=getData, args=(url,)) 
      t.daemon = True 
      t.start() 

doWork(urls) 
+0

그 첫 번째 오류 메시지를 검색하는 것에서 나는 당신이 Windows에 있다고 추측하고 있습니다. 나는 그 정보를 추가 할 것입니다 (어쩌면 "windows"질문에 태그를 붙이십시오). 또한 diffbot의 대화식 사용 (예 : Python 셸)에서 오류를 발생시키는 경우, 실행중인 Python 버전, 정확히 어떻게 스크립트를 실행하는지, 다른 Python 스크립트가 정상적으로 작동하는지 여부 등을 추가하십시오. –

답변

3

문제는 당신이 독립 실행 형 스크립트로이 작업을 실행할 때 doWork에서 데몬 스레드를 많이 가지고 있지만 데몬 스레드가 남아있는 경우 스크립트가 종료됩니다, 그래서 모두가 인터프리터에 의해 살해 당할 것입니다 종료. 대화 형으로 IDLE에서 실행하면 인터프리터가 종료되지 않으므로 문제가 발생하지 않습니다.

관련 문제