Programacion: Semaforos en Python

Hola a todos, os cuento, estoy programando una pequeña practica para una asignatura de Redes, consistente en crear un cliente y un servidor y por sockets enviarse informacion, para acceder a una base de datos y bueno....no os aburro.

El caso es que es en Python y necesito Semaforos, para k no puedan acceder a una Base de Datos un lector y un escritor a la vez, y estoy haciendo "mini-scripts" de python para probar y luego ya aplicarlo a la practica.

Se crear semaforos..pero para que solo pueda acceder un lector a la base de datos a la vez...pero necesito uno, para que puedan acceder "n" lectores. Me explico, necesito un semaforo que puedan entrar simultaneamente 10 lectores, ni uno mas....

tengo el siguiente codigo en python:
import socket, thread, syslog, time
def handler(socket):
   global nclntlock,nclnt
   nclntlock.acquire()
   data=socket.recv(1024)
   if (data=='hola'):
           print 'cli1'
   else:
      print 'cli2'

   if (data=='hola'):
      time.sleep(10)
   nclntlock.release()

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(('localhost', 8000))
serversocket.listen(5)
nclnt = 2
nclntlock = thread.allocate_lock()
while 1:
   clientsocket, clientaddress = serversocket.accept()
   syslog.syslog('Incoming connection')
   thread.start_new_thread(handler, (clientsocket,))


como ya os digo, la funcionalidad es una tonteria, solo lo kiero para probar semaforos, pero no se (ni encuentro en google) como hacer para crear un semaforo al k puedan acceder mas de un lector simulteaneamente.

Espero que alguien sepa responderme. Muchas Gracias!

:)
Es un problema de libro que se suele llamar de 'Lectores y Escritores'. Temo que no deberíamos decirte mucho más ya que cuando te pongas a buscarlo/implementarlo será cuando realmente lo aprendas.

Ah y por cierto, desde mi punto de vista el manejo de la concurrencia debe hacerlo la base de datos nativamente.

- ferdy
1 respuesta