Ich habe festgestellt, dass es in Python 3.4 nur wenige verschiedene Bibliotheken für Multiprocessing / Threading gibt: Multiprocessing vs Threading vs Asyncio .
Aber ich weiß nicht, welches ich verwenden soll oder welches das "empfohlene" ist. Tun sie dasselbe oder sind sie unterschiedlich? Wenn ja, welches wird für was verwendet? Ich möchte ein Programm schreiben, das Multicores in meinem Computer verwendet. Aber ich weiß nicht, welche Bibliothek ich lernen soll.
python
multithreading
python-3.x
multiprocessing
python-asyncio
user3654650
quelle
quelle
Antworten:
Sie sind für (geringfügig) unterschiedliche Zwecke und / oder Anforderungen vorgesehen. CPython (eine typische Python-Hauptimplementierung) verfügt weiterhin über die globale Interpretersperre, sodass eine Multithread-Anwendung (heutzutage eine Standardmethode zur Implementierung der Parallelverarbeitung) nicht optimal ist. Deshalb
multiprocessing
kann man es vorziehenthreading
. Da jedoch möglicherweise nicht jedes Problem effektiv in [fast unabhängige] Teile aufgeteilt wird, besteht möglicherweise ein Bedarf an intensiver Interprozesskommunikation. Das ist der Grund, warummultiprocessing
esthreading
im Allgemeinen nicht vorzuziehen ist .asyncio
(Diese Technik ist nicht nur in Python verfügbar, sondern auch in anderen Sprachen und / oder Frameworks, z. B. Boost.ASIO ) ist eine Methode, mit der viele E / A-Operationen aus vielen gleichzeitigen Quellen effektiv verarbeitet werden können, ohne dass paralleler Code ausgeführt werden muss . Es ist also nur eine Lösung (in der Tat eine gute!) Für eine bestimmte Aufgabe, nicht für die Parallelverarbeitung im Allgemeinen.quelle
[Schnelle Antwort]
TL; DR
Die richtige Wahl treffen:
Referenz
[ HINWEIS ]:
asyncio
Ereignisschleife ( uvloop machtasyncio
2-4x schneller).[UPDATE (2019)]:
quelle
asyncio
wenn Sie von erwarteten Funktionen verwenden,request
Bibliothek ist keine abwartende Methode, stattdessen können Sie wie dieaiohttp
Bibliothek oder Async-Anfrage usw. verwendenDies ist die Grundidee:
Halten Sie sich also grundsätzlich an das Threading, es sei denn, Sie haben E / A / CPU-Probleme.
quelle