Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Deadlock import thread

8 réponses
Avatar
Chris
Bonjour,

Suite =E0 mes recherches, j'ai d=E9couvert que c'est une limitation (un
bug?) de Python
http://www.mail-archive.com/python-dev@python.org/msg24747.html

=E7a marche effectivement bien quand on sort le import du thread.
Le probl=E8me c'est que je ne peux pas utiliser la librairie mysqldb ou
sqlalchemy sans bloquer mon thread car ces 2 librairies comportent des
import au sein des fonctions et m=E9thodes.

Merci de ton aide news1234

Chris

8 réponses

Avatar
Michel Claveau - MVP
Salut !

Rien ne t'empêche de faire suivre ton import par les import "d'intérieur
des fonctions" du module importé. Anticiper les imports, en somme.

@+
--
Michel Claveau
Avatar
NicolasP
Le 03/05/2010 18:18, Michel Claveau - MVP a écrit :
Salut !

Rien ne t'empêche de faire suivre ton import par les import "d'intérieur
des fonctions" du module importé. Anticiper les imports, en somme.

@+


Mais dans ce cas, il faut connaitre les imports à faire...
C'est pas vraiment sûr comme solution ça.
Une évolution de la librairie utilisée et patatras !

Nicolas
Avatar
NicolasP
Le 03/05/2010 14:52, Chris a écrit :
Bonjour,

Suite à mes recherches, j'ai découvert que c'est une limitation (un
bug?) de Python
http://www.mail-archive.com//msg24747.html

ça marche effectivement bien quand on sort le import du thread.
Le problème c'est que je ne peux pas utiliser la librairie mysqldb ou
sqlalchemy sans bloquer mon thread car ces 2 librairies comportent des
import au sein des fonctions et méthodes.

Merci de ton aide news1234

Chris


Si les threads ne le font pas, tu peux toujours utiliser les processes.
C'est un peu plus compliqué pour communiquer entre processes mais :
- Ca t'obliges à coder correctement la communication inter-processes (alors que tu peux faire du vrai cochon avec les threads en pensant que ça marche bien).
- Tu profites de la puissance de tous les coeurs de ton processeur (alors qu'en multi-threads tu n'utilises qu'un coeur).
- Tu peux déporter l'exécution des processes sur d'autres machines (à vérifier).

Nicolas
Avatar
Chris
Salut,

Ok merci pour vos retours, je vais essayer d'utiliser la librairie
multiprocessing.
Je vous tiendrais au courant si ça fonctionne mieux.

Pour la petite histoire, je voulais simplement utiliser mon orm dans
un thread pour éviter le gel de mon GUI (wxpython) et envisager des
barres de chargement.
Les processes peuvent donc être une solution valable dans mon cas.

Merci à vous deux
Avatar
Bruno Desthuilliers
NicolasP a écrit :
Le 03/05/2010 14:52, Chris a écrit :
Bonjour,

Suite à mes recherches, j'ai découvert que c'est une limitation (un
bug?) de Python
http://www.mail-archive.com//msg24747.html

ça marche effectivement bien quand on sort le import du thread.
Le problème c'est que je ne peux pas utiliser la librairie mysqldb ou
sqlalchemy sans bloquer mon thread car ces 2 librairies comportent des
import au sein des fonctions et méthodes.





Mmm... Il me semble pourtant bien qu'il est possible d'utiliser
sqlalchemy dans des applications multithreadées. C'est même un cas
d'utilisation assez courant dans les applis web.
Avatar
Daireaux Jean-Baptiste
NicolasP a écrit :
...
- Tu profites de la puissance de tous les coeurs de ton processeur
(alors qu'en multi-threads tu n'utilises qu'un coeur).
...
Nicolas



Ne connaissant pas bien python, cette remarque concerne-t-elle
spécifiquement python ?

Si non, cela me semble louche comme remarque ...

J.B.D.
Avatar
NicolasP
Le 05/05/2010 13:02, Daireaux Jean-Baptiste a écrit :
NicolasP a écrit :
...
- Tu profites de la puissance de tous les coeurs de ton processeur
(alors qu'en multi-threads tu n'utilises qu'un coeur).
...
Nicolas



Ne connaissant pas bien python, cette remarque concerne-t-elle
spécifiquement python ?


Oui.
Et plus particulièrement CPython. Pour les autres implémentations de Python, je ne sais pas.
CPython est l'interpréteur du langage Python le plus couramment utilisé.


Si non, cela me semble louche comme remarque ...



C'est en fait un peu plus compliqué que ça.
CPython crée bien un thread système par thread python. Mais, à cause du GIL, un seul thread fonctionne à la fois. C'est donc comme si un seul coeur était utilisé.

Pour une explication rapide, voir http://linuxgazette.net/107/pai.html chapitre 3.

Il y a des benchmarks qui montrent qu'utiliser les threads peut être pénalisant par rapport à l'utilisation d'un seul thread (la commutation de thread prends du temps). C'est le cas pour du calcul distribué par exemple.

Pour une explication un peu plus poussée, voir http://www.python.org/dev/peps/pep-0371/
Pour les résultats des benchmarks, rechercher "50000 Fibonacci numbers" dans la page.

Les process prennent plus de temps à s'initialiser que les threads mais permettent de faire du vrai multitâche.

Nicolas



J.B.D.
Avatar
Daireaux Jean-Baptiste
NicolasP a écrit :
Le 05/05/2010 13:02, Daireaux Jean-Baptiste a écrit :
NicolasP a écrit :
...
- Tu profites de la puissance de tous les coeurs de ton processeur
(alors qu'en multi-threads tu n'utilises qu'un coeur).
...
Nicolas



Ne connaissant pas bien python, cette remarque concerne-t-elle
spécifiquement python ?


Oui.
Et plus particulièrement CPython. Pour les autres implémentations de
Python, je ne sais pas.
CPython est l'interpréteur du langage Python le plus couramment utilisé.


Si non, cela me semble louche comme remarque ...



C'est en fait un peu plus compliqué que ça.
CPython crée bien un thread système par thread python. Mais, à cause du
GIL, un seul thread fonctionne à la fois. C'est donc comme si un seul
coeur était utilisé.

Pour une explication rapide, voir http://linuxgazette.net/107/pai.html
chapitre 3.

Il y a des benchmarks qui montrent qu'utiliser les threads peut être
pénalisant par rapport à l'utilisation d'un seul thread (la commutation
de thread prends du temps). C'est le cas pour du calcul distribué par
exemple.

Pour une explication un peu plus poussée, voir
http://www.python.org/dev/peps/pep-0371/
Pour les résultats des benchmarks, rechercher "50000 Fibonacci numbers"
dans la page.

Les process prennent plus de temps à s'initialiser que les threads mais
permettent de faire du vrai multitâche.

Nicolas




Merci pour le complément d'information.
J.B.D.