IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Python4Lazarus : utiliser plusieurs fils d'exécution [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Octobre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Octobre 2015
    Messages : 15
    Par défaut Python4Lazarus : utiliser plusieurs fils d'exécution
    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

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 221
    Par défaut
    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 ?

    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?
    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.

    Ami calmant, J.P

  3. #3
    Membre averti
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Octobre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Octobre 2015
    Messages : 15
    Par défaut
    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())

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 221
    Par défaut
    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

  5. #5
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    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

  6. #6
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 221
    Par défaut
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       property ThreadExecMode: TThreadExecMode read fThreadExecMode;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        property ThreadExecMode: TThreadExecMode read fThreadExecMode
    	                                         write 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 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')
    Voici ce que cela donne après exécution :
    Nom : PythonThread.PNG
Affichages : 704
Taille : 19,0 Ko

    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
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Debug multithread application
    Par Pfeffer dans le forum Visual Studio
    Réponses: 1
    Dernier message: 17/07/2013, 11h08
  2. JMS and Websphere Application Server 6.0
    Par longbeach dans le forum Websphere
    Réponses: 0
    Dernier message: 12/08/2008, 17h46
  3. [synchronized][multithread] application gelée
    Par sami44 dans le forum Langage
    Réponses: 2
    Dernier message: 10/01/2008, 17h49
  4. Solaris and le multithread -> où est le bug
    Par in dans le forum Langage
    Réponses: 4
    Dernier message: 07/02/2007, 09h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo