Twisted – Arquitectura del framework de red más popular

…ácil de múltiples protocolos de red juntos. Extensible. La arquitectura de Twisted Twisted es un motor de red dirigido a eventos. La programación dirigida a eventos está tan integrada con la filosofía en el diseño de Twisted que es necesario tomar un momento para recordar qué significa exactamente esto. La programación dirigida a eventos es un paradigma en el que el flujo del programa es determinado por eventos externos. Está caracterizado por un…

Introducción a Twisted y al desarrollo de servidores

…ado e instalado, puedes probar Twisted con el siguiente código: >>> import twisted >>> twisted.version Version(‘twisted‘, 13, 2, 0) ¡Has instalado Twisted correctamente! Un poco más Concurrencia La programación multi-hilo conlleva, en la mayoría de los casos, a un código propenso a errores y comportamiento indefinido. La programación secuencial no es una opción, ya que esto no permitiría a un servidor servir datos a más de una conexión. Twisted so…

Twisted: web y base de datos

…se.db») cursor = conn.cursor() La implementación análoga en un proyecto de Twisted sería: from twisted.enterprise import adbapi dbpool = adbapi.ConnectionPool(«sqlite3», «database.db») Como primer argumento se indica el nombre del módulo que se desea utilizar, en forma de cadena y sin necesidad de importarlo previamente. Los argumentos remanentes serán pasados directamente a la función sqlite3.connect, incluyendo argumentos por nombre. Por lo tant…

Desarrollando una API REST con Twisted Klein

Desarrollando una API REST con Twisted Klein

…ein import Klein from twisted.enterprise.adbapi import ConnectionPool from twisted.internet.defer import inlineCallbacks from twisted.mail.smtp import sendmail from werkzeug.exceptions import NotFound, MethodNotAllowed EMAIL_SERVER = » USER = » PASSWORD = » def emails_to_json(rows): def row_to_json(row): return json.dumps( {‘id’: row[0], ‘to’: row[1], ‘sent’: bool(row[2])}) return tuple(map(row_to_json, rows)) class EmailService: app = Klein()…

Chat vía web con WebSockets y Twisted

Chat vía web con WebSockets y Twisted

…iente. Servidor El código para el servidor es bastante pequeño. Utilizamos Twisted y el módulo txWS que le añade soporte para WebSockets. Creamos el archivo wsserver.py y comenzamos por importar todo lo necesario. from twisted.internet import protocol, reactor, endpoints from txws import WebSocketFactory Luego, creamos el protocolo. class ClientProtocol(protocol.Protocol): def __init__(self, factory): self.factory = factory def dataReceived(self,…

Tareas en segundo plano con PyQt/PySide

Tareas en segundo plano con PyQt/PySide

…os de los problemas de compartir objetos entre hilos, habida cuenta de que Twisted corre siempre en el hilo principal. Quienes estén algo versados en Twisted hayarán esta solución muy satisfactoria. Y efectivamente lo es: Qt y Twisted congenian muy bien por su estructura, su filosofía e incluso sus convenciones de nombramiento. Conclusión Pues bien, hemos revisado las tres soluciones. ¿Cuál se ajusta mejor a tu propósito? Resumimos lo principal de…

Descargar archivo con barra de progreso en PyQt/PySide

Descargar archivo con barra de progreso en PyQt/PySide

…nWindow, QLabel, QPushButton from PyQt5.QtWidgets import QProgressBar from twisted.internet.defer import inlineCallbacks class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle(«Descarga con progreso en PyQt») self.resize(400, 300) self.label = QLabel(«Presione el botón para iniciar la descarga.», self) self.label.setGeometry(20, 20, 200, 25) self.button = QPushButton(«Iniciar descarga», self) self.button.move(20,…

El sistema de importación (import)

El sistema de importación (import)

…una línea de estas características: import twisted.python.threadpool tp = twisted.python.threadpool.Threadpool() Para evitar tener que indicar toda la serie de módulos y paquetes (twisted.python.threadpool) como prefijo a la clase Threadpool, seguramente sea más sencillo y cómodo decir: from twisted.python.threadpool import Threadpool tp = Threadpool() A veces, en cambio, usar el nombre del módulo como prefijo es muy esclarecedor, por lo cual con…

Instalación y utilización de pip en Windows, Linux y OS X

…autopy (0.51) pip (1.5.4) psutil (0.6.1) pyodbc (3.0.7) setuptools (3.4.4) Twisted (13.2.0) uptime (3.0.1) zope.interface (4.1.0) Además, puede utilizarse –outdated junto al comando list para determinar cuáles de los paquetes instalados se encuentran desactualizados. $ pip list –outdated zope.interface (Current: 4.1.0 Latest: 4.1.1) Por último, para ver información sobre un paquete instalado: $ pip show zope.interface — Name: zope.interface Ve…