Python - Queue

 
Vista:

Queue

Publicado por Sergio (9 intervenciones) el 17/06/2019 02:04:55
Hola.

Estoy trabajando con el módulo queue y lo que quiero es llenar una cola con msj repetivos que se ejecutan en un bucle infinito cada cierto tiempo, eso lo he logrado con éxito. El tema es que deseo que cuando lee una variable desde una bd mysql y esta tome un valor determinado, elimine los msj almacenados en la cola para mostrar un msj específico. Podrían darme una mano???

Ahí agrego el código:

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/usr/bin/python
# -*- coding: iso-8859-15
 
#from lcd import *
import Queue
import threading
from time import sleep
import MySQLdb
 
DB_HOST = 'localhost'
DB_USER = 'root'
DB_PASS = 'mi_pass'
DB_NAME = 'mi_name'
 
def run_query(query=''):
    datos = [DB_HOST, DB_USER, DB_PASS, DB_NAME]
 
    conn = MySQLdb.connect(*datos) # Conectar a la base de datos
    cursor = conn.cursor()         # Crear un cursor
    cursor.execute(query)          # Ejecutar una consulta
 
    if query.upper().startswith('SELECT'):
        data = cursor.fetchall()   # Traer los resultados de un select 
        #data = cursor.fetchone()   # Traer los resultados de una sola fila 
    else:
        conn.commit()              # Hacer efectiva la escritura de datos 
        data = None
 
    cursor.close()                 # Cerrar el cursor 
    conn.close()                   # Cerrar la conexion 
    return data
 
opcion0 = 0
opcion1 = 1
opcion2 = 2
opcion3 = 3
opcion4 = 4
 
# FIFO LCD
mq = Queue.Queue()
 
def periodica():
    mq.put(opcion0)
    mq.put(opcion1)
    sleep(0)
    mq.put(opcion0)
    mq.put(opcion2)
    sleep(0)
    mq.put(opcion0)
    mq.put(opcion3)
    sleep(0)
    mq.put(opcion0)
    mq.put("")
    #print (mq.get())
 
    global per
    per = threading.Timer(10.0, periodica)
    per.start()
 
inicio = 0
while True:
     if inicio == 0:
        periodica()
        inicio = 1
     else:
        query="SELECT * FROM msj WHERE id = '1'"
        uid=run_query(query)
        tipo=uid[0][1]
        fecha=uid[0][2]
        #print tipo
        if tipo == "1":
              per.cancel()
              mq.empty()
              mq.put(opcion0)
              mq.put(opcion4)
              print (mq.get())
              sleep(10)
              query = "UPDATE msj SET tipo = '0', fecha = NOW() WHERE id = '1'"
              uid = run_query(query)
              periodica()
        print (mq.get())
 
     sleep(1)

Gracias!!!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jaime
Val: 385
Bronce
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

Queue

Publicado por Jaime (101 intervenciones) el 17/06/2019 19:14:22
Necesitarias es hacer un "if" y con este limpiar la cola.
para limpiarla, investigué un poco y con el método clear()
objeto.clear()
https://rstopup.com/como-borrar-un-multiprocesamiento-cola-en-python.html

Pd: yo no lo ensayé, cuando tenga lugar, te puedo colaborar más. Por el momento te voy orientando a lo que yo haria
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar