10

Ho uno script che effettua chiamate a un'API. Per accelerare lo script ho cercato di implementare il threading.Errore fatale Python: PyImport_GetModuleDict: no dizionario del modulo

Lo script seguente funziona quando sono in IDLE, tuttavia quando provo a eseguirlo con un sys argv dalla riga di comando ho ricevuto due tipi di errori elencati di seguito.

Errore 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. 

Errore 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): 

non riesco a trovare nulla su questi errori. Quindi, ogni aiuto è apprezzato. Di seguito è la parte dello script che si occupa di threading.

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

Dal googling del primo messaggio di errore, suppongo che tu sia su Windows. Vorrei aggiungere quell'informazione (magari tagga anche la domanda "windows"). Aggiungi anche: quale versione di Python stai usando, esattamente come stai eseguendo lo script, se altri script Python si comportano normalmente, se l'uso interattivo di diffbot (cioè nella shell Python) genera l'errore ... –

risposta

3

Il problema è che quando si esegue questo come uno script stand-alone si hanno un sacco di thread demoni in DoWork, ma lo script uscirà quando solo thread demoni sono lasciati, in modo che tutti vieni ucciso dall'interprete uscire. Quando lo esegui in modo interattivo in IDLE, l'interprete non esce, quindi non ti imbatti in quel problema.