7
votes

Python Idle compatible avec Multhreading?

Il semble que l'inactivité (une partie de l'installation standard Python Windows) n'exécute pas correctement de programmes multithreads sans obstacles ni blacks. Est-ce que quelqu'un sait d'un moyen de résoudre ce problème?

Le programme suivant restera toujours au ralenti mais se terminera normalement lorsqu'il est exécuté avec l'interprète Python directement: P>

U:\dev\py\multithreadtest>python mt.py
0
1
2
3
4
5
6
7
8
9
1277935368.84
10
11
12
13
14
15
16
17
18
19
1277935369.84
20
21
22
23
24
25
26
27
28
29
1277935370.84
1277935371.84
all done!


0 commentaires

3 Réponses :


0
votes

AFAIK C'est une crêche lors de l'exécution de code fileté dans Idle. Oisif utilise la gaine générale afin que les conditions de race et les blocages sont courantes. Malheureusement, je ne suis pas assez versé suffisamment versé dans le filetage pour offrir un aperçu de la fabrication de ce fil-coffre-fort, au-delà de l'évidence.


3 commentaires

Le ralenti est écrit en tkinter, pas Wxpython.


Le ralenti est écrit en python et le code Python n'utilise pas directement le gil. AFAIK, l'utilisation du module de filetage de HIDLE est limitée aux classes de filetage et de condition et la fonction actuelle_thread.


En attendant, cela peut être un bon conseil, cela ne semble pas être le problème ici. Le code peut être corrigé par @TerryJanreedy Réponse.



0
votes

Le ralenti a des problèmes connus en matière de filetage. Je ne connais pas une quantité écrasante sur les détails de pourquoi c'est un problème, parce que je fais de mon mieux de rester à l'écart du ralenti, mais je sais que c'est. Je suggérerais vivement que vous venez d'aller chercher des outils IronPython et Python pour Visual Studio. Les outils de débogage de VS sont absolument inégalés, surtout compte tenu de l'énorme bibliothèque d'add-ons.


1 commentaires

Afaik, il n'y a pas de problèmes sur le tracker python, les bugs.python.org, sur le ralenti et le filetage. Si quelqu'un connaît une question réelle et spécifique au repos, veuillez le signaler là-bas.



2
votes
while threading.activeCount() > initial_threads:

1 commentaires

Le même problème de threading.ActiveCount 'Démarrage' ci-dessus 1 pourrait se produire lorsqu'il est exécuté sous un autre environnement géré ou lorsqu'un module n'est pas le premier à importer une filetage.