OVH Cloud OVH Cloud

Cherche une classe VERROU ??

9 réponses
Avatar
martin
Bonjour,

Savez vous ou je pourrais trouver une classe verrou en python ?

Quel est le terme en anglais pour ce type de code "verrou".


Actuellement j'utilise ceci qui n'est pas bien propre

Merci

#!python

# On importe les modules
import os

# Verrou
def retourne_verrou (fichier="C:\Program Files\Pdf2word\Verrou.txt"):
"""Retourne la valeure du fichier, soit ON soit OFF
"""
f=open(fichier, "r", 0)
valeur=f.read()
f.close()
return valeur

def initialise_verrou (fichier="C:\Program Files\Pdf2word\Verrou.txt",
mode="ON"):
"""Initialise le fichier verrou soit ON soit OFF
"""
f=open(fichier, "w", 0)
f.write(mode)
f.close()
pass


initialise_verrou()
print retourne_verrou()
initialise_verrou(mode="OFF")
print retourne_verrou()

9 réponses

Avatar
Jerome
Bonjour

martin wrote:
Bonjour,

Savez vous ou je pourrais trouver une classe verrou en python ?

Quel est le terme en anglais pour ce type de code "verrou".


semaphore, mutex ou même monitor en java si je comprends bien ce que tu
veux faire


Actuellement j'utilise ceci qui n'est pas bien propre


Effectivement, ce n'est pas très propre.


Tu as une classe mutex en python qui te permet de gérer des accès
concurrents à des ressources partagées.

Avatar
martin
Merci pour ton aide !!

"Jerome" a écrit dans le message de
news:d30irp$u7d$
Bonjour

martin wrote:
Bonjour,

Savez vous ou je pourrais trouver une classe verrou en python ?

Quel est le terme en anglais pour ce type de code "verrou".


semaphore, mutex ou même monitor en java si je comprends bien ce que tu
veux faire


Actuellement j'utilise ceci qui n'est pas bien propre


Effectivement, ce n'est pas très propre.


Tu as une classe mutex en python qui te permet de gérer des accès
concurrents à des ressources partagées.



Avatar
Olivier Ravard
"Jerome" a écrit dans le message de news:
d30irp$u7d$
Bonjour

martin wrote:
Bonjour,

Savez vous ou je pourrais trouver une classe verrou en python ?

Quel est le terme en anglais pour ce type de code "verrou".


semaphore, mutex ou même monitor en java si je comprends bien ce que tu
veux faire


Je pense que les mutex ou semaphore peuvent être utilisé comme "verrou"
entre threads
mais ils n'ont pas la capacité de faire un "verrou" entre applis. Du moins
si j'ai bien tout
compris.
Ce que cherche martin, c'est locker un fichier (par exemple) entre deux
applis.

O.R.




Actuellement j'utilise ceci qui n'est pas bien propre


Effectivement, ce n'est pas très propre.


Tu as une classe mutex en python qui te permet de gérer des accès
concurrents à des ressources partagées.



Avatar
SL
martin wrote:
Bonjour,

Savez vous ou je pourrais trouver une classe verrou en python ?

Quel est le terme en anglais pour ce type de code "verrou".

lock


Actuellement j'utilise ceci qui n'est pas bien propre

Merci

#!python

# On importe les modules
import os

# Verrou
def retourne_verrou (fichier="C:Program FilesPdf2wordVerrou.txt"):
"""Retourne la valeure du fichier, soit ON soit OFF
"""
f=open(fichier, "r", 0)
valeur=f.read()
f.close()
return valeur

def initialise_verrou (fichier="C:Program FilesPdf2wordVerrou.txt",
mode="ON"):
"""Initialise le fichier verrou soit ON soit OFF
"""
f=open(fichier, "w", 0)
f.write(mode)
f.close()
pass


initialise_verrou()
print retourne_verrou()
initialise_verrou(mode="OFF")
print retourne_verrou()



amha, la presence du fichier suffit.


si fichier existe alors verrou, sinon par verrou.. pas besoin de lire ce
qu'il y a dedans...

Avatar
David Josty
Oui, effectivement je n'y avais pas penser !!!!
merci 1000 fois

"SL" a écrit dans le message de
news:42543799$0$25025$
martin wrote:
Bonjour,

Savez vous ou je pourrais trouver une classe verrou en python ?

Quel est le terme en anglais pour ce type de code "verrou".

lock


Actuellement j'utilise ceci qui n'est pas bien propre

Merci

#!python

# On importe les modules
import os

# Verrou
def retourne_verrou (fichier="C:Program FilesPdf2wordVerrou.txt"):
"""Retourne la valeure du fichier, soit ON soit OFF
"""
f=open(fichier, "r", 0)
valeur=f.read()
f.close()
return valeur

def initialise_verrou (fichier="C:Program FilesPdf2wordVerrou.txt",
mode="ON"):
"""Initialise le fichier verrou soit ON soit OFF
"""
f=open(fichier, "w", 0)
f.write(mode)
f.close()
pass


initialise_verrou()
print retourne_verrou()
initialise_verrou(mode="OFF")
print retourne_verrou()



amha, la presence du fichier suffit.


si fichier existe alors verrou, sinon par verrou.. pas besoin de lire ce
qu'il y a dedans...



Avatar
Eric Brunel
On Thu, 7 Apr 2005 10:49:16 +0200, David Josty wrote:
"SL" a écrit dans le message de
news:42543799$0$25025$
[snip et remis dans le bon ordre - rappel: le top-post, c'est Mal(TM)]

amha, la presence du fichier suffit.

si fichier existe alors verrou, sinon par verrou.. pas besoin de lire ce
qu'il y a dedans...


Oui, effectivement je n'y avais pas penser !!!!
merci 1000 fois


Je ne connais pas le contexte de l'appli, mais je suppose que s'il y a besoin d'un verrou fichier, c'est que plusieurs applications vont accéder à une meme ressource en meme temps. Dans ce cadre, utiliser un fichier n'est peut-etre pas une bonne idée, étant donné que plusieurs applications peuvent ouvrir le meme fichier en meme temps sans que cela pose de problème (c'est en tous cas vrai sous Unix; sous Windows, je ne sais pas). J'avais donc jadis résolu le problème en utilisant non pas un fichier, mais un répertoire, l'avantage étant que l'opération de création de répertoire est atomique: soit le répertoire existe, et l'opération échoue, soit le répertoire n'existe pas, et l'opération réussit. Cela permet donc de tester et de poser le verrou en meme temps, ce qui évite tout un tas de problèmes du genre:

- Le programme 1 teste le verrou et le trouve libre
- En parallèle, le programme 2 teste le verrou et le trouve libre aussi (le programme 1 ne l'ayant pas encore posé)
- Le programme 1 pose le verrou
- Le programme 2 pose le verrou aussi
- Les deux programmes tentent d'utiliser la ressource en meme temps et tout explose

Si je devais faire une classe Verrou, je ferais donc comme ça:

--Verrou.py-----------------------------------
import os

class DejaVerrouille(Exception):
pass

class Verrou:
def __init__(self, repertoireVerrou):
self.repertoire = repertoireVerrou
try:
os.mkdir(self.repertoire)
except OSError:
raise DejaVerrouille
def liberer(self):
os.rmdir(self.repertoire)
----------------------------------------------

Après, ça s'utilise comme ça:

from Verrou import Verrou
v1 = Verrou('.monVerrou')
v2 = Verrou('.monVerrou')
Traceback (most recent call last):



File "<stdin>", line 1, in ?
File "Verrou.py", line 12, in __init__
raise DejaVerrouille
Verrou.DejaVerrouille
v1.liberer()
v2 = Verrou('.monVerrou')





HTH
--
python -c 'print "".join([chr(154 - ord(c)) for c in "U(17zX(%,5.z^5(17l8(%,5.Z*(93-965$l7+-"])'



Avatar
F. Petitjean

Si je devais faire une classe Verrou, je ferais donc comme ça:

--Verrou.py-----------------------------------
import os

class DejaVerrouille(Exception):
pass

class Verrou:
def __init__(self, repertoireVerrou):
self.repertoire = repertoireVerrou
try:
os.mkdir(self.repertoire)
except OSError:
raise DejaVerrouille
def liberer(self):
os.rmdir(self.repertoire)
----------------------------------------------

Après, ça s'utilise comme ça:

from Verrou import Verrou
v1 = Verrou('.monVerrou')
v2 = Verrou('.monVerrou')
Traceback (most recent call last):



File "<stdin>", line 1, in ?
File "Verrou.py", line 12, in __init__
raise DejaVerrouille
Verrou.DejaVerrouille
v1.liberer()
v2 = Verrou('.monVerrou')





HTH
Lorsqu'on lit un code aussi clair on en vient à se demander si c'est du

Python ou du français ! Il n'y a plus qu'à faire campagne pour avoir les
lettres accentuées dans les noms Python (classes, méthodes, fonctions,
attributs) et on passe directement sur fr.lettres.langue.francaise !

un grand merci à Eric.




Avatar
David Josty
"Eric Brunel" a écrit dans le message de
news:
On Thu, 7 Apr 2005 10:49:16 +0200, David Josty wrote:
"SL" a écrit dans le message de
news:42543799$0$25025$
[snip et remis dans le bon ordre - rappel: le top-post, c'est Mal(TM)]

amha, la presence du fichier suffit.

si fichier existe alors verrou, sinon par verrou.. pas besoin de lire
ce



qu'il y a dedans...


Oui, effectivement je n'y avais pas penser !!!!
merci 1000 fois


Je ne connais pas le contexte de l'appli, mais je suppose que s'il y a
besoin d'un verrou fichier, c'est que plusieurs applications vont accéder à

une meme ressource en meme temps. Dans ce cadre, utiliser un fichier n'est
peut-etre pas une bonne idée, étant donné que plusieurs applications peuvent
ouvrir le meme fichier en meme temps sans que cela pose de problème (c'est
en tous cas vrai sous Unix; sous Windows, je ne sais pas). J'avais donc
jadis résolu le problème en utilisant non pas un fichier, mais un
répertoire, l'avantage étant que l'opération de création de répertoire est
atomique: soit le répertoire existe, et l'opération échoue, soit le
répertoire n'existe pas, et l'opération réussit. Cela permet donc de tester
et de poser le verrou en meme temps, ce qui évite tout un tas de problèmes
du genre:

- Le programme 1 teste le verrou et le trouve libre
- En parallèle, le programme 2 teste le verrou et le trouve libre aussi
(le programme 1 ne l'ayant pas encore posé)

- Le programme 1 pose le verrou
- Le programme 2 pose le verrou aussi
- Les deux programmes tentent d'utiliser la ressource en meme temps et
tout explose


Si je devais faire une classe Verrou, je ferais donc comme ça:

--Verrou.py-----------------------------------
import os

class DejaVerrouille(Exception):
pass

class Verrou:
def __init__(self, repertoireVerrou):
self.repertoire = repertoireVerrou
try:
os.mkdir(self.repertoire)
except OSError:
raise DejaVerrouille
def liberer(self):
os.rmdir(self.repertoire)
----------------------------------------------

Après, ça s'utilise comme ça:

from Verrou import Verrou
v1 = Verrou('.monVerrou')
v2 = Verrou('.monVerrou')
Traceback (most recent call last):



File "<stdin>", line 1, in ?
File "Verrou.py", line 12, in __init__
raise DejaVerrouille
Verrou.DejaVerrouille
v1.liberer()
v2 = Verrou('.monVerrou')







Merci pour ton aide, je comprend tout l'interet du system !!!
Tres astucieux !!!
Merci

HTH
--
python -c 'print "".join([chr(154 - ord(c)) for c in
"U(17zX(%,5.z^5(17l8(%,5.Z*(93-965$l7+-"])'





Avatar
David Josty
"Eric Brunel" a écrit dans le message de
news:
On Thu, 7 Apr 2005 10:49:16 +0200, David Josty wrote:
"SL" a écrit dans le message de
news:42543799$0$25025$
[snip et remis dans le bon ordre - rappel: le top-post, c'est Mal(TM)]

amha, la presence du fichier suffit.

si fichier existe alors verrou, sinon par verrou.. pas besoin de lire
ce



qu'il y a dedans...


Oui, effectivement je n'y avais pas penser !!!!
merci 1000 fois


Je ne connais pas le contexte de l'appli, mais je suppose que s'il y a
besoin d'un verrou fichier, c'est que plusieurs applications vont accéder à

une meme ressource en meme temps. Dans ce cadre, utiliser un fichier n'est
peut-etre pas une bonne idée, étant donné que plusieurs applications peuvent
ouvrir le meme fichier en meme temps sans que cela pose de problème (c'est
en tous cas vrai sous Unix; sous Windows, je ne sais pas). J'avais donc
jadis résolu le problème en utilisant non pas un fichier, mais un
répertoire, l'avantage étant que l'opération de création de répertoire est
atomique: soit le répertoire existe, et l'opération échoue, soit le
répertoire n'existe pas, et l'opération réussit. Cela permet donc de tester
et de poser le verrou en meme temps, ce qui évite tout un tas de problèmes
du genre:

- Le programme 1 teste le verrou et le trouve libre
- En parallèle, le programme 2 teste le verrou et le trouve libre aussi
(le programme 1 ne l'ayant pas encore posé)

- Le programme 1 pose le verrou
- Le programme 2 pose le verrou aussi
- Les deux programmes tentent d'utiliser la ressource en meme temps et
tout explose


Si je devais faire une classe Verrou, je ferais donc comme ça:

--Verrou.py-----------------------------------
import os

class DejaVerrouille(Exception):
pass

class Verrou:
def __init__(self, repertoireVerrou):
self.repertoire = repertoireVerrou
try:
os.mkdir(self.repertoire)
except OSError:
raise DejaVerrouille
def liberer(self):
os.rmdir(self.repertoire)
----------------------------------------------

Après, ça s'utilise comme ça:

from Verrou import Verrou
v1 = Verrou('.monVerrou')
v2 = Verrou('.monVerrou')
Traceback (most recent call last):



File "<stdin>", line 1, in ?
File "Verrou.py", line 12, in __init__
raise DejaVerrouille
Verrou.DejaVerrouille
v1.liberer()
v2 = Verrou('.monVerrou')





HTH
--
python -c 'print "".join([chr(154 - ord(c)) for c in
"U(17zX(%,5.z^5(17l8(%,5.Z*(93-965$l7+-"])'




J'ai trouvé sa :


6.9 Determining if Another Instance of a Script Is Already Running in
Windows
Credit: Bill Bell

6.9.1 Problem
In a Win32 environment, you want to ensure that only one instance of a
script is running at any given time.

6.9.2 Solution
Many tricks can be used to avoid starting multiple copies of an application,
but they're all quite fragile-except those based on a mutual-exclusion
(mutex) kernel object, such as this one. Mark Hammond's precious win32all
package supplies all the needed hooks into the Windows APIs to let us
exploit a mutex for this purpose:

from win32event import CreateMutex
from win32api import GetLastError
from winerror import ERROR_ALREADY_EXISTS
from sys import exit

handle = CreateMutex(None, 1, 'A unique mutex name')

if GetLastError( ) == ERROR_ALREADY_EXISTS:
# Take appropriate action, as this is the second
# instance of this script; for example:
print 'Oh! dear, I exist already.'
exit(1)
else:
# This is the only instance of the script; let
# it do its normal work. For example:
from time import sleep
for i in range(10):
print "I'm running",i
sleep(1)
print "I'm done"

6.9.3 Discussion
The string 'A unique mutex name' must be chosen to be unique to this script,
but it should not be dynamically generated, as it must be the same for all
potential simultaneous instances of the same script. A fresh, globally
unique ID generated at script-authoring time would be a good choice.
According to the Windows documentation, the string can contain any
characters except backslashes (). On Windows platforms that implement
Terminal Services, you can have a prefix of Global or Local, but such
prefixes would make the string invalid for Windows NT, 95, 98, and ME.

The Win32 API call CreateMutex creates a Windows kernel object of the
mutual-exclusion (mutex) kind and returns a handle to it. Note that we do
not close this handle; it needs to exist throughout the time this process is
running. The Windows kernel takes care of removing the handle (and the
object it indicates, if the handle being removed is the only handle to that
kernel object) when our process terminates.

The only thing we really care about is the return code from the API call,
which we obtain by calling the GetLastError API right after it. That code is
ERROR_ALREADY_EXISTS if and only if the mutual-exclusion object we tried to
create already exists (i.e., if another instance of this script is already
running).

Note that this approach is perfectly safe and not subject to race conditions
and similar anomalies if two instances of the script are trying to start at
the same time (a reasonably frequent occurrence, for example, if the user
erroneously double-clicks in an Active Desktop setting where a single click
already starts the application). The Windows specifications guarantee that
only one of the instances will create the mutex, while the other will be
informed that the mutex already exists. Mutual exclusion is therefore
guaranteed by the Windows kernel itself, and the recipe is entirely solid.

6.9.4 See Also
Documentation for the Win32 API in win32all
(http://starship.python.net/crew/mhammond/win32/Downloads.html) or
ActivePython (http://www.activestate.com/ActivePython/); Windows API
documentation available from Microsoft (http://msdn.microsoft.com); Python
Programming on Win32, by Mark Hammond and Andy Robinson (O'Reilly, 2000).

I RuBoard