Je suis en train de profiler du code CPython multithread.
Afin de mesurer le temps qu'il faut pour exécuter un segment de code spécifique, je voudrais forcer le GIL (Global Interpreter Lock) à pas basculer entre threads pour ce segment. Comment cela peut-il être fait?Forcer le GIL à ne pas changer de threads
MISE À JOUR:
Assumer le pseudo-code suivant:
some_code_1()
make_the_interpreter_not_change_thread()
take_start_time() # time critical
code_to_profile() # time critical
take_end_time() # time critical
release_the_interpreter()
some_code_2()
Ma préoccupation est que l'interprète basculera fil pendant la période de profilage 'moment critique'.
Voir ma mise à jour de la question. Souhaitez placer un grand nombre via 'sys.setcheckinterval()' dans 'make_the_interpreter_not_change_thread()' fonctionne? L'interpréteur change-t-il le nombre actuel d'instructions virtuelles python, ou la nouvelle valeur ne sera-t-elle affectée que lors du cycle suivant de la vérification de l'interpréteur, ce qui pourrait malheureusement se produire pendant 'code_to_profile()'? – Jonathan
@Jonathan: La fonction réinitialise le nombre actuel lorsqu'il est appelé. Donc, l'appeler avec une grande valeur garantit qu'aucun commutateur de thread ne sera fait pour ce nombre d'instructions de bytecode. –