#1227 gracias, les echaré un ojo!
Gente una dudilla, estoy haciendo una api usando sqlalchemy y quiero que cuando intenten actualizar un registro no tenga que comprobar qué campo/s quieren actualizar sino que lo detecte solo. Estoy intentando esto:
def update_tipo_contratos(id_tipo_contratos):
data = request.get_json()
tipo_contrato = TblTipoContratos.query.get(id_tipo_contratos)
for k in data.keys():
tipo_contrato.k = data[k]
#...
El problema es que tipo_contrato.k no accede al campo que yo quiero porque no coge el valor de k y como es un query object no puedo hacer tampoco tipo_contrato[k]
Alguna idea? Gracias
Alguien de aquí se ha pegado con RabbitMQ y conexiones mediante SSL? Estoy en un callejón sin salida y me estoy pensando tirar el ordenador por la ventana
Una dudilla, me piden hacer un código en python que esté completo y listo para ejecutar en un arm de 1 core y 256 de ram.
El programa ya prácticamente lo tengo pero me falta esa parte que no sé ni como empezarla y decidir de qué manera almacenar la información (tiene que ser persistente) que lo he dejado un poco de lado porque imagino que tendrá relación con el arm.
Alguna idea?
Gracias!
#1238 no te entiendo. Lo que te queda es la parte de la persistencia dices? Sobre qué SO se ejecuta, Linux?
#1239 Sí, linux. Me queda saber como tengo que adaptar el código para que funcione en una máquina de ese estilo y la persistencia. Solo tengo que almacenar cadenas de texto cortas pero no sé qué soporte sería el más óptimo.
#1240 Ahora mismo no veo la dificultad pero yo tiraría por un fichero de texto plano (CSV), un SQLite o algo así.
#1240 a ver, con esa memoria y cpu la verdad no veo problema alguno. Si fuese un sistema embebido con 256k y tal pues igual sí que tocaría tirar de micropython o alguna historia así (de no tirar por C, claro).
Con 256 MB puedes hasta meter el DOOM si te da la gana xDD
#1241 Ayuda a decidir si tengo que controlar que se puede interrumpir la ejecución aleatoriamente y al arrancar de nuevo tiene que recuperar los datos leídos hasta la parada?
#1242 Ah vale, pensaba que tenía que hacer algo en plan configuración o parecido para que funcionase en ese sistema. Mejor entonces
Gracias!
#127 funciona genial, justo lo que quería. Muchas gracias!
En general usas más esta librería que Matplotlib? O la usas sólo para hacer gráficos interactivos?
De qué formas puedo cerrar un server socket? Cuando hago control+C realmente no se para hasta que no intenta acceder otra conexión. Me gustaría algo en plan que cuando está unos segundos sin recibir datos se cerrase o algo así.
#1247 a ver es que lo que quiero es hacerle una prueba que este recibiendo y procesando datos pero que al acabar la prueba se cierre y me muestre un resumen de los datos procesados.
Entonces quiero poner alguna forma automática de que se cierre para que muestre ese resumen al finalizar.
#1248 Intuyo que quien cierra la conexión es el cliente no? Entonces no veo el problema, cuando el cliente cierra la conexión (close()
) recibes 0 bytes, por lo que ahí ya puedes descartar la conexión.
De todas formas, te recomiendo que establezcas un protocolo de comunicación si no lo has hecho ya, donde marques en el primer byte lo que vas a enviar, así como avisando de que vas a cerrar la conexión.
#1248 No se si te he etendido bien pero si es desde el servidor, en el main loop del server es tan facil como poner try (con tus cosas xd) y luego un except con un KeyboardInterrupt, que es el ctrl+c, en esa excepción pones el socket.close() despues por ejemplo tu función para que tire lo que quieras.
#1250 a esto me refiero exactamente, el tema es que tengo la excepción keyboardinterrupt pero cuando hago control c no se termina de parar y mostrar las stats sino que tengo que lanzarle otra petición y ya entonces sí.
Igual es porque me falta el socket.close en la excepción, voy a probar.
Thanks
Edit: pues tampoco es por eso
Edit2: olvidé comentar que estoy usando selectors para manejar varias conexiones simultáneamente, no sé si tiene algo que ver
#1251 creia que el problema lo tenías en el server soz xDDD. Por otra petición dices que debes darle 2 veces al teclado para que salga?
#1252 yo tengo el server, hago control c y como si nada. Por muchas veces que le de.
Si hago otra petición, la rechaza y ya sí me muestra las stats.
Es como si se interrumpiera cuando hago control c pero sin mostrarlo hasta que no hay intento de otra petición.
#1253 pero no entiendo por qué tienes que hacer control c en el server XD.
Es decir, tienes un cliente que envia unos datos al servidor, cuando el cliente termina de enviarte los datos, tu le das a control +c para que cierre la conexión, pero no te hace ni puto caso y hasta que el cliente no te vuevle a intentar enviar algo no salta para hacer el tratamiento de datos que quieres hacer, es así?
Lo que te he dicho antes es que sea el cliente que cuando termine, mande una señal, o cierre él la conexión y que el propio servidor corte al leer EOF (0 bytes). Es que sin ver el código o ando espeso o no te entiendo XD
#1255 me explico fatal, perdonad.
A ver, el server está siempre escuchando y abre y cierra conexiones con los clientes como dices pero no se para al terminar con un cliente sino que se queda a la escucha por si entra otro después.
Yo lo que quiero es una forma de pararlo manualmente para que me muestre esas stats totales de todas las conexiones que hubo durante su ejecución.
El código es que no lo tengo a mano ahora, por la noche lo pongo.
Hace mucho que no toco sockets, pero cuando captures la excepción cierralo, saca los resultados y vuelve a abrirlo
#1256 https://stackoverflow.com/questions/1112343/how-do-i-capture-sigint-in-python
Te vale? Si no quieres matar el server pues interceptas esa u otra se;al y solo printas sin el exit.
#1256 Solo un apunte, usar with es muy comodo en estos casos para asegurarte que 'cierras la puerta al salir'.
Te copio el ejemplo de la doc para sockets
# Echo server program
import socket
HOST = '' # Symbolic name meaning all available interfaces
PORT = 50007 # Arbitrary non-privileged port
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024)
if not data: break
conn.sendall(data)
No consigo que me funcione nada de eso, es como que no detecta que he hecho control C, no sé por qué.
Este es mi código
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as lsock:
lsock.bind((host, port))
lsock.listen()
print("listening on", (host, port))
lsock.setblocking(False)
sel.register(lsock, selectors.EVENT_READ, data=None)
try:
while True:
events = sel.select(timeout=None)
for key, mask in events:
if key.data is None:
accept_wrapper(key.fileobj) #Acepta una conexion
else:
service_connection(key, mask) #Recoge lo que envía el cliente
except KeyboardInterrupt:
print("caught keyboard interrupt, exiting")
finally:
sel.close() #sel es el selector de sockets, el que los gestiona
Creo que esta es la línea que me está jodiendo: events = sel.select(timeout=None), deja el server bloqueado hasta que hay una conexión
EDIT: Era justo eso, hay que poner -1 para que no ponga en block el server. Perdón por el mareo y gracias a todos!