error: can ' T start new thread

Ich habe eine Website, die läuft mit Folgen-Konfiguration:

Django + mod-wsgi + apache

In einer Benutzer-Anfrage, schicke ich ein anderes HTTP-Anforderung an einen anderen Dienst, und lösen dieses durch httplib Bibliothek von python.

Aber manchmal ist dieser service nicht bekommen, die Antwort zu lange, und das Zeitlimit für httplib nicht funktioniert. Also ich thread erstellen, in diesem thread, die ich senden Anfrage an service, und nehmen Sie es nach 20 sec (20 Sek. - ist eine Zeitüberschreitung der Anforderung). Dies ist, wie es funktioniert:

class HttpGetTimeOut(threading.Thread):
    def __init__(self,**kwargs):
        self.config = kwargs
        self.resp_data = None
        self.exception = None
        super(HttpGetTimeOut,self).__init__()
    def run(self):

        h = httplib.HTTPSConnection(self.config['server'])
        h.connect()
        sended_data = self.config['sended_data']
        h.putrequest("POST", self.config['path'])
        h.putheader("Content-Length", str(len(sended_data)))
        h.putheader("Content-Type", 'text/xml; charset="utf-8"')
        if 'base_auth' in self.config:
            base64string = base64.encodestring('%s:%s' % self.config['base_auth'])[:-1]
            h.putheader("Authorization", "Basic %s" % base64string)
        h.endheaders()

        try:
            h.send(sended_data)
            self.resp_data = h.getresponse()
        except httplib.HTTPException,e:
            self.exception = e
        except Exception,e:
            self.exception = e

sowas...

Und verwenden Sie es, indem Sie diese Funktion:

getting = HttpGetTimeOut(**req_config)
getting.start()
getting.join(COOPERATION_TIMEOUT)
if getting.isAlive(): #maybe need some block
    getting._Thread__stop()
    raise ValueError('Timeout')
else:
    if getting.resp_data:
        r = getting.resp_data
    else:
        if getting.exception:
            raise ValueError('REquest Exception')
        else:
            raise ValueError('Undefined exception')

Ist und alles Prima funktioniert, aber irgendwann habe ich beginnen, fangen diese Ausnahme:

error: can't start new thread

auf der Linie der Ausgangspunkt neuer thread:

getting.start()

und die nächste und die Letzte Zeile des traceback ist

File "/usr/lib/python2.5/threading.py", line 440, in start
    _start_new_thread(self.__bootstrap, ())

Und die Antwort ist: Was ist geschehen?

Vielen Dank für alle, und sorry für mein Englisch pur. 🙂

InformationsquelleAutor der Frage Oduvan | 2009-12-02

Schreibe einen Kommentar