Grundlegendes zu Python-GIL - E / A-Bindung vs. CPU-Bindung

VonPython-Threading Dokumentation

In CPython kann aufgrund der globalen Interpreter-Sperre nur ein Thread Python-Code gleichzeitig ausführen (auch wenn bestimmte leistungsorientierte Bibliotheken diese Einschränkung möglicherweise umgehen). Wenn Sie möchten, dass Ihre Anwendung die Rechenressourcen von Multi-Core-Computern besser nutzt, sollten Sie Multiprocessing verwenden. Threading ist jedoch immer noch ein geeignetes Modell, wenn Sie mehrere E / A-gebundene Tasks gleichzeitig ausführen möchten.

Jetzt habe ich so einen Threadworker

def worker(queue):
    queue_full = True
    while queue_full:
        try:
            url = queue.get(False)
            w = Wappalyzer(url)
            w.analyze()
            queue.task_done()

        except Queue.Empty:
            queue_full = False

Hierw.analyze() zwei Dinge tun

Schaben Sie die URL mitrequests BibliothekAnalyse der HTML-Scrap-Datei mitpyv8 Javascript-Bibliothek

Soweit ich weiss,1 ist I / O gebunden und2 ist CPU gebunden.

Heißt das, GIL beantragt2 und mein Programm funktioniert nicht richtig?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage