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

WinDev Discussion :

Multithread sur une source de données (MySQL)


Sujet :

WinDev

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Août 2009
    Messages : 82
    Points : 53
    Points
    53
    Par défaut Multithread sur une source de données (MySQL)
    Bonjour,

    J'ai besoin de réaliser un traitement sur chaque enregistrements résultants d'une requête SQL.
    Pour accélérer ce traitement, je souhaite faire du multithread (il n'y a pas besoin d'attendre la fin du traitement de la première ligne résultante pour enchainer la deuxième).

    Seulement, je ne vois pas trop comment gérer l'accès de plusieurs threads sur la même source de données.

    Exemple : ma requête retourne 18 lignes et j'ai 2 threads
    Je souhaite que le thread 1 accède à la première ligne et le thread 2 voit que l'accès à la première ligne est déjà occupé, alors il enchaine sur la ligne suivante (la deuxième).

    Avez-vous une idée svp ?

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2023
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2023
    Messages : 42
    Points : 74
    Points
    74
    Par défaut
    Bonjour,
    Je ne me souviens plus quel exemple, mais dans les exemples livrés avec windev, il y en a un sur les sémaphores qui permettent d'attendre la disponibilité d'un Thread.
    Cordialement

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2023
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2023
    Messages : 42
    Points : 74
    Points
    74
    Par défaut
    Bon, je suis allé voir si je pouvais retrouver l'exemple, il s'agit de "Les threads (pool)".
    je pense que vous pouvez adapter à votre cas en demandant un traitement pour chaque ligne, chaque traitement attendant une place dans le pool.

  4. #4
    Membre éclairé
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2017
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 323
    Points : 781
    Points
    781
    Par défaut
    Yop. Moi quand je lis "J'ai besoin de réaliser un traitement sur chaque enregistrements résultants d'une requête SQL." je demande direct si tu ne peux pas faire faire ce traitement a une requête plutôt? Si tu veux modifier les enregistrements en base au final, peut être que c'est à la base de bosser, pas au code.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Août 2009
    Messages : 82
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par kunnskap Voir le message
    Yop. Moi quand je lis "J'ai besoin de réaliser un traitement sur chaque enregistrements résultants d'une requête SQL." je demande direct si tu ne peux pas faire faire ce traitement a une requête plutôt? Si tu veux modifier les enregistrements en base au final, peut être que c'est à la base de bosser, pas au code.
    Rien est modifié en base, c'est juste une lecture

  6. #6
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 103
    Points : 8 990
    Points
    8 990
    Par défaut
    Bonjour,

    La réponse sera la même : pourquoi exécuter 1000 fois une requête avec un id plutôt que d'en faire une avec les 1000 id ?
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2023
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2023
    Messages : 42
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    Moi, ce que je comprends de la demande de matheous, c'est qu'il utilise le résultat de la requête pour traiter des données ailleurs (pas dans la base de données), traitement long pour lequel il souhaite faire appel à des threads (j'ai déjà eu à traiter ce genre de cas).

    @ matheous
    As-tu trouvé une solution correspondant à tes besoins ?

  8. #8
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 103
    Points : 8 990
    Points
    8 990
    Par défaut
    Dans ce cas, pourquoi ne pas faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    i est entier = 1
    POUR TOUT srcResReq
    ThreadExécute("Thread" + NumériqueVersChaine(i, "03d"), threadNormal, ProcThread, srcResReq)
    i++
    Temporisation(5) // juste pour limiter un peu l'avalanche de threads. Est peut-être inutile...
    FIN
    Très bourrin mais ça fait du thread
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  9. #9
    Membre éclairé
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2017
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 323
    Points : 781
    Points
    781
    Par défaut
    Utilises les tâches parallèles et avec TâcheParallèleParamètre tu peux fixer le nombre max de threads qui vont s'exécuter en même temps.
    Tu récupères tes data que tu parcours et pour chaque ligne tu envoies à la tâche parallèle une variable de type Enregistrement.

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/04/2018, 13h58
  2. Impossible d'ajouter une source de données MySQl
    Par Klemsy78 dans le forum Visual Studio
    Réponses: 0
    Dernier message: 11/11/2010, 12h45
  3. Réponses: 4
    Dernier message: 08/01/2009, 16h01
  4. Réponses: 3
    Dernier message: 11/03/2008, 16h10
  5. Réponses: 3
    Dernier message: 23/03/2007, 23h26

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