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

Python Discussion :

Python et DLL multithread


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Points : 78
    Points
    78
    Par défaut Python et DLL multithread
    Bonjour,

    Y a-t-il un moyen d'appeler à partir de Python 3.6 une DLL "maison" qui gère plusieurs autres threads?

    Mes essais se sont soldés par un échec (là dans ma DLL j'essaye juste de créer 4 threads).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    lib = ctypes.CDLL(r'C:\RSI\SourcesC\CIAO_win\DEV_CIAO\x64\Release\DLLfromPython.dll')
    lib.StartThread_ThreadManager.restype = ctypes.c_int
    lib.StartThread_ThreadManager.argtypes = [ctypes.c_int]
    retval = lib.StartThread_ThreadManager(4)
    et j'obtiens ce genre d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Trying to create 4 threads!
    Traceback (most recent call last):
      File "C:\Python\Python36\lib\runpy.py", line 183, in _run_module_as_main
    Thread 1, param->counter = 0
        mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
      File "C:\Python\Python36\lib\runpy.py", line 109, in _get_module_details
        __import__(pkg_name)
      File "C:\RSI\SourcesC\CIAO_win\DEV_CIAO\DLLfromPython\python_dll.py", line 49, in <module>
    Thread 0, param->counter = 0
        retval = lib.StartThread_ThreadManager(4)
    OSError: exception: access violation writing 0x0000000000000004
    On voit que la DLL essaye de créer lesdits threads (là 2 sont apparemment créés en affichant "Thread N, param->counter = 0") mais après ça plante... Mon code C utilise CreateThread, et j'ai déclaré mes "HANDLES" de thread en variables globales (statiques ou non, ça donne le même résultat). De même le code du thread est déclaré comme "static DWORD".

    Merci d'avance. G13

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Points : 78
    Points
    78
    Par défaut
    En fait ça marche. Il y avait un problème de std::vector mal initialisé. Donc au lieu d'effacer mon topic, je le laisse au cas où quelqu'un d'autre se poserait la question.

    Donc la réponse est temporairement "oui": on peut créer une DLL qui créé des sous thread, charger (avec ctypes.CDLL(...)) et appeler les méthodes avec Python, initialiser des sous-threads par l'appel d'une méthode appropriée (moi j'ai créé N threads qui sont en attente), et déclencher ces sous-thread au fil du programme python tant que la DLL reste ouverte.

    Reste à voir si ça fonctionne aussi lorsque la librairie est ouverte depuis l'intérieur d'une classe Python. Je complèterai la réponse lorsque j'aurai fait mes tests!

    Gorgo13

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Points : 78
    Points
    78
    Par défaut
    Ca semble aussi fonctionner lorsque le tout est enrobé dans une classe...

    GXIII

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

Discussions similaires

  1. [Python 3.X] Compiler code python en dll
    Par ANOVA dans le forum Général Python
    Réponses: 2
    Dernier message: 12/09/2017, 13h45
  2. Interfaçage Python sur dll C/C++
    Par ManusDei dans le forum Interfaçage autre langage
    Réponses: 1
    Dernier message: 12/02/2015, 12h12
  3. DLL MultiThread qui lance une autre DLL
    Par rgarnier dans le forum Langage
    Réponses: 0
    Dernier message: 04/08/2011, 09h42
  4. [C#] DLL multithread
    Par levalp dans le forum Windows Forms
    Réponses: 32
    Dernier message: 14/01/2008, 15h57

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