Bonjour,
J'essaye d'utiliser python4lazarus, démarrer chaque PythonEngine dans un Thread et exécutze dans chacun un script Python différent.
Puis-je avoir un exemple si c'est possible ?
Merci
Bonjour,
J'essaye d'utiliser python4lazarus, démarrer chaque PythonEngine dans un Thread et exécutze dans chacun un script Python différent.
Puis-je avoir un exemple si c'est possible ?
Merci
hello,
peux-tu nous dire ce que tu veux faire exactement ? Lancer plusieurs scripts python en parallèle ? Autre chose ? As-tu déjà essayé quelque chose ? Montre-nous alors ton code.
As-tu ce problème ?
La personne qui maintient Python4Lazarus (Alextp) est souvent présent dans le forum anglais de Lazarus alors pose ta question dans ce forum ou relance la question ci-dessus dans ce forum.Is it possible to run more than one PythonEngine from threads inside an app?
When I try that, it says "There is already one instance of TPythonEngine running". Maybe there is a workaround?
Ami calmant, J.P
Bonjour,
Je cherche à démarrer plusieurs scripts Python (qui bouclent à l'infini, où je devrais récupérer le résultat d'un traitement) et chacune dans un thread. J'ai déjà essayé avec une classe TThread et ça ne marche pas. J'ai même testé avec le initThread:=True du PythonEngine mais l'application reste quand même bloquée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Procedure TMyThread.Execute; begin GetPythonEngine.ExecString(memo1.Text); end;
Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 While True: print(generate())
hello,
cela n'a pas l'air facile de gérer les threads avec Python4Lazarus. Il y a bien la classe TPythonThread mais il n'y a pas d'exemple qui fonctionne dans les démos. Il y a bien la démo 11 dans la partie démo Delphi mais elle est compliquée et difficile à traduire en Lazarus. Et Il y a même je pense des erreurs de code dans la définition de TPythonThread dans PythonEngine.pas ( exemple : la propriété ThreadExecMode n'a pas de définition write).
Sinon il y a des explications pour l'utilisation de Thread dans Python4Delphi ici
Ami calmant, J.P
Salut,
un petit zip attaché ici avec ton application de test, nous permettrait de t'aider plus efficacement. Sinon il y a une autre solution lancer les scripts via la commande python avec un TProcess et récupérer le résultat.
Tu peux te référer à cette discussion pour plus d'infos.
A+
Jérôme
- "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
- "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
- "La simplicité est la sophistication suprême" - Léonard De Vinci
- "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei
Mes projets sur Github - Blog - Site DVP
hello,
bon ben finalement j'ai réussi à utiliser TPythonThread.
1 - Il y a une erreur dans le fichier PythonEngine.pas du paquet Python4Lazarus :
il manque le write pour la propriété ThreadExecMode de la classe TPythonThread
près de la ligne 3127 remplacer :
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part property ThreadExecMode: TThreadExecMode read fThreadExecMode;
2 - J'ai créé un petit projet (en pièce jointe) qui permet de lancer ce script Python dans 3 threads en même temps :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2property ThreadExecMode: TThreadExecMode read fThreadExecMode write fThreadExecMode;
Voici ce que cela donne après exécution :
Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 # coding: utf8 # script for testing PythonThread # Jurassic Pork october 2020 import time print('Coundown Thread1 :') time.sleep(1.0) i = 1 while i < 5: print('Thread1 : ',5 - i) i += 1 time.sleep(1.0) print('Thread1 terminated')
Les print du python sont envoyés dans la console.
Le projet a été testé avec Lazarus 2.0.10 sous windows 10 et Lazarus 2.0.8 sous Centos 8.1.
En pièce jointe ma configuration du composant PythonEngine1 pour windows. Pour centos 8 :
DllName : libpython3.6m.so
DllPath : /usr/lib64
RegVersion : 3.6
Ami calmant, J.P
Partager