Actuellement, j'utilise python 3.4.3 et je développe l'application PyQt5.pickle.dump bloque le thread principal dans l'application python multithread à cause de GIL
Dans mon application, il y a un QThread, et un gros objet (100MB) est en train d'être déversé par le thread.
Cependant, le vidage de cet objet nécessite 1 ~ 2 secondes, et il bloque le thread principal environ 1 ~ 2 secondes à cause de GIL.
Comment puis-je résoudre ce problème (non-blocage du thread principal)?
Je pense que mon sérialisation objet à la chaîne prend du temps et il faut GIL, éventuellement bloque le thread principal. (Comme je sais, écrit fichier ne nécessite pas GIL)
Je pense à l'aide Cython, mais puisque je suis le débutant de Cython, je ne suis pas sûr que l'utilisation de Cython puisse résoudre ce problème.
Y a-t-il un moyen de contourner ce problème? Editer: J'ai essayé le module multiprocessing
, mais le temps d'intercommunication (en passant les variables de mémoire partagée entre les processus) prend également environ 1 ~ 2 secondes, ce qui ne donne finalement aucun avantage.
Est-il obligatoire que votre application soit multithread? Vous pouvez vous débarrasser de GIL si vous utilisez multiproccess à la place. –
@RicardoSilveira J'ai essayé un module de multitraitement, mais cela prend aussi 1 ~ 2 secondes pour transmettre les variables de la mémoire partagée à travers les processus, ce qui ne donne finalement aucun avantage. J'aurais dû le mentionner dans ma question. – asqdf
Peut-être [multiprocessing.sharedctypes] (https://docs.python.org/3/library/multiprocessing.html#module-multiprocessing.sharedctypes) –