El 01/03/2011 20:15, Sergio Fernández escribió:
¿por qué no le echas un vistazo al módulo daemon...?
http://pypi.python.org/pypi/python-daemon/

2011/3/1 marco<pyt...@diezplus.com>:
Hola a todos!!

Tengo la siguiente duda.

Necesito lanzar un proceso que quede residente en memoria y que cada cierto
tiempo ejecute algo,
debería quedar tipo demonio de linux o tipo TSR (Terminate and Stay
Resident).

Terminate and Stay Resident ... Ufff hace mas de 10 años que no veia eso ;)

Utilizo python 2.6 sobre Windows 7.
Mirad el siguiente ejemplo,

#leer_com.py###########################
import threading, time
def espera():
    while True:
        time.sleep(15)
        # comprobaciones varias
        # etc
        print "comprobando..."
p = threading.Thread(target = espera,)
p.setDaemon(True)
p.start()
######################################

Si lo ejecuto en una shell de python, sin problema, cada 15 segundos me
ejecuta la función espera,
mientras tanto yo puedo seguir trabajando con cualquier cosa desde esa misma
shell.
Ahora bien, si lo ejecuto desde una línea de comandos del sistema, ej.:
  c:\>python leer_com.py
acaba el programa y no hace nada de nada. Lo he convertido a ejecutable con
py2exe y más de
lo mismo, no funciona. Si hago  p.join()  en el script queda en espera pero
no vuelve al interprete de comandos
que lo que yo necesito. Necesito lanzarlo y a ejecutar otra cosa.

El programa termina porque se alcanza el final y ya no tiene nada que hacer. Aunque hayas lanzado el tread debes mantenerlo vivo, un simple 'while True: pass' al final hara lo que necesitas.

Para simular un daemon en windows puedes crear un servicio con py2exe o simplemente hacer que se cargue al arrancar el equipo.

Saludos,
--
Oswaldo Hernández
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a