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 :

Comment intégrer des chaines binaires dans le code source en base64


Sujet :

Python

  1. #21
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Note: J'ai écris cela à la volée avec un petit test windows, pardon pour les autres bugs.
    J'ai le droit de déprimer ?
    Merci d'utiliser le forum pour les questions techniques.

  2. #22
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    J'ai le droit de déprimer ?
    Non: c'est pas encore vendredi
    J'ai largement pompé le code de portalocker, i.e. faire du code avec cut&paste, c'est relativement "facile".
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #23
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour wiztricks,

    Et tu trouves ça plus SIMPLE ?

    Désolé, mais au bout de 2 heures, ça ne marche toujours pas... Je ne dois pas être doué.

    Je reprendrai un de ces jours.

    Une question cependant: quand la 1ère instance du programme se plante pour une raison quelconque, est-ce que le verrou disparait ou pas? S'il reste, c'est un grave défaut, parce que ça veut dire qu'une 1ère instance ne peut plus être lancée de nouveau. Et ce serait encore pire si le verrou restait après reboot...

    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  4. #24
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Points : 3 325
    Points
    3 325
    Par défaut
    Bonjour,
    Citation Envoyé par tyrtamos Voir le message
    Désolé, mais au bout de 2 heures, ça ne marche toujours pas...
    si ça fonctionne très bien fcntl, soit en attente de la libération du verrou soit en générant une exception.
    il est aussi possible d'écrire des infos dans le fichier verrou pour savoir par exemple quel processus l'a créé et depuis quand.

    Citation Envoyé par tyrtamos Voir le message
    Une question cependant: quand la 1ère instance du programme se plante pour une raison quelconque, est-ce que le verrou disparait ou pas?
    non le verrou ne reste pas si le processus est tué.

  5. #25
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Comme je suis en même temps curieux et têtu, je m'y suis remis, et j'ai réussi!

    Je suis reparti sur une page blanche, simplement avec la doc et 2 heures de plus.

    Voilà le module portalocker revu à ma sauce:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # Python v2.7
     
    import sys
     
    #############################################################################
    def lockfile_unix(f):
        """Unix: verrouille le fichier dont le descripteur est f """
        lockf(f.fileno(),  LOCK_EX | LOCK_NB)
     
    #############################################################################
    def lockfile_win(f):
        """Windows: verrouille le fichier dont le descripteur est f """
        locking(f.fileno(), LK_NBLCK, 1)
     
    #############################################################################
    def lockfile_rien(f):
        """Ni Windows ni Unix: cette fonction ne fait rien """
        pass
     
    #############################################################################
    lockfile = None
     
    # si Unix
    try:
        from fcntl import lockf, LOCK_NB, LOCK_EX
        lockfile = lockfile_unix
    except:
        pass
     
    # si Windows:
    if lockfile == None:
        try:
            from msvcrt import locking, LK_NBLCK, LK_UNLCK
            lockfile = lockfile_win
        except:
            pass
     
    # si aucune des 2 importations ne marche:
    if lockfile == None:
        lockfile = lockfile_rien
    Et voilà un programme test qui utilise ce module:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    import os, sys
    import time
    from portalocker import lockfile
     
    #############################################################################
    def bidon():
        """programme qui ne fait rien d'autre que d'attendre 15 secondes de CPU"""
        t0 = time.clock()
        while True:
            if time.clock()-t0 > 15:
                break
     
    #############################################################################
    if __name__ == '__main__':
     
        # tentative de verrou sur le fichier témoin (mettre le bon chemin)
        nfc = "fichierverrou.txt"
        f = None
        try:
            f = open(nfc, 'w')
            lockfile(f)
        except:
            if f != None:
                f.close()
            print u"Echec: il y a déjà une 1ère instance en cours!"
            sys.exit()
     
        bidon()
     
        f.close() # le fichier témoin doit rester ouvert jusqu'à la fin du programme
    J'ai vérifié que ça marchait sans modification sous Windows (7) et sous Linux (Ubuntu 10.10): lancement avec 2 consoles.

    J'ai vérifié aussi qu'une fois la 1ère instance du programme terminé, même de façon anormale, le verrou n'est pas maintenu, ce que confirme beekeep (merci).

    Il s'agit donc d'une solution qui marche, même si elle n'est pas très simple, et qui a l'avantage de pouvoir être utilisée pour des programmes en console.

    Merci, wiztricks!

    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  6. #26
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    J'ai vérifié aussi qu'une fois la 1ère instance du programme terminé, même de façon anormale, le verrou n'est pas maintenu, ce que confirme beekeep (merci).
    Le verrou est rendu par l'OS lorsqu'il nettoie le process qui a été tué.
    On a potentiellement les mêmes problèmes dans toutes les solutions: si le process est 'bloqué', il faut forcer la sortie et si l'OS est chargé, la libération du lock prendra du temps (de l'ordre de plusieurs dixièmes de secondes).
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 14
    Dernier message: 16/04/2013, 12h22
  2. Réponses: 2
    Dernier message: 31/03/2006, 16h48
  3. Réponses: 11
    Dernier message: 13/03/2006, 17h51
  4. Comment utiliser des instructions SSE2 dans un code c++?
    Par alexIsBack dans le forum x86 32-bits / 64-bits
    Réponses: 7
    Dernier message: 22/02/2006, 19h10

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