ff-multiconverter, multimedia, audio, video, linux, ubuntu ubuntu kylin, china, releases, linux terminal, ubuntu, linux, comandos, shell conky, gadgets, ubuntu, linux SpeedTest-Cli, velocidad, red, consola, terminal tag foto 6 pinta, grafica, linux, ubuntu djl, juegos, yum, synaptic, paquetes ubuntu, releases, canonical psensor, ubuntu, linux, sistema, monitor

Guia Python: redefinición de los operadores matemáticos.

python logoPython es un lenguaje de script desarrollado por Guido van Rossum.

Podemos codificar empleando programación lineal, estructurada y orientada a objetos (tengamos en cuenta que esta última es la que se ha impuesto en la actualidad).

Se cuenta con intérpretes de Python en múltiples plataformas: Windows, Linux, Mac etc. Se pueden desarrollar aplicaciones de escritorio como aplicaciones web. Empresas como Google, Yahoo, Nasa etc. utilizan este lenguaje para sus desarrollos (actualmente el creador de Python Guido van Rossum trabaja para Google.)

Se puede ejecutar instrucciones de Python desde la línea de comando o creando archivos con extensión *.py. Cuando uno comienza a aprender este lenguaje la línea de comandos nos provee una retroalimentación del resultado en forma inmediata.

El objetivo de este tutorial es presentar en forma progresiva los conceptos fundamentales de este lenguaje y poder analizar los problemas resueltos y codificar los problemas propuestos en este mismo sitio, sin tener que instalar en un principio el Python en su equipo (o luego de instalado poder avanzar con el tutorial en cualquier máquina conectada a internet).

Redefinición de los operadores matemáticos con objetos.
python operadores matematicos
Python nos permite redefinir los operadores matemáticos cuando planteamos una clase.
Los métodos especiales que debemos implementar son los siguientes:
Para el operador +:
__add__(self,objeto2)

Para el operador -:

__sub__(self,objeto2)

Para el operador *:

__mul__(self,objeto2)

Para el operador /:

__div__(self,objeto2)

Veamos con un ejemplo la sintaxis para redefinir el operador +. Crearemos una clase Cliente de un banco y redefiniremos el operador + para que nos retorne la suma de los depósitos de los dos clientes que estamos sumando.

class Cliente:
    def __init__(self,nom,mon):
        self.nombre=nom
        self.monto=mon
    def __add__(self,objeto2):
        s=self.monto+objeto2.monto
        return s
cli1=Cliente('Ana',1200)
cli2=Cliente('Luis',1500)
print 'El total depositado es '
print cli1+cli2

Es muy importante tener en cuenta que debemos redefinir un operador matemático siempre y cuando haga nuestro programa más legible.

Debemos redefinir los operadores +,-,*,/ etc. solo para las clases que con solo leer su nombre el programador intuya que operación implementaría dicho operador.

Redefinición de los operadores relacionales con objetos.

python operadoresAritmeticos

Python también nos permite redefinir los operadores relacionales cuando planteamos una clase.

Los métodos especiales que podemos implementar son los siguientes:

Para el operador ==:

__eq__(self,objeto2)

Para el operador !=:

__ne__(self,objeto2)

Para el operador >:

__gt__(self,objeto2)

Para el operador >=:

__ge__(self,objeto2)

Para el operador <:

__lt__(self,objeto2)

Para el operador <=:

__le__(self,objeto2)

Es importante recordar que una redefinición de un operador tiene sentido si ayuda y hace más claro nuestro algoritmo.

Veamos con un ejemplo la sintaxis para redefinir todos estos operadores relacionales. Crearemos una clase Persona que tiene como atributo el nombre y la edad. El operador == retornará verdadero si las dos personas tienen la misma edad, el operador > retornará True si la edad del objeto de la izquierda tiene una edad mayor a la edad del objeto de la derecha del operador >, y así sucesivamente

class Persona:
    def __init__(self,nom,ed):
        self.nombre=nom
        self.edad=ed
    def __eq__(self,objeto2):
        if self.edad==objeto2.edad:
            return True
        else:
            return False
    def __ne__(self,objeto2):
        if self.edad!=objeto2.edad:
            return True
        else:
            return False
    def __gt__(self,objeto2):
        if self.edad>objeto2.edad:
            return True
        else:
            return False
    def __ge__(self,objeto2):
        if self.edad>=objeto2.edad:
            return True
        else:
            return False
    def __lt__(self,objeto2):
        if self.edad<objeto2.edad:
            return True
        else:
            return False
    def __le__(self,objeto2):
        if self.edad<=objeto2.edad:
            return True
        else:
            return False
per1=Persona('juan',22)
per2=Persona('ana',22)
if per1==per2:
    print 'Las dos personas tienen la misma edad.'
else:
    print 'No tienen la misma edad.'
Como pedemos observar planteamos un método por cada operdor relacional:

def __eq__(self,objeto2):
        if self.edad==objeto2.edad:
            return True
        else:
            return False


El método recibe como referencia (self) la dirección del objeto ubicado a la izquierda del operador relacionar y como parámetro (objeto2) la referencia del objeto ubicado a la derecha del operador. Solo nos queda analizar el atributo edad de cada objeto y retornar True si los dos almacenan el mismo valor, en caso contrario retornar False.
Si te ha gustado el artículo inscribete al feed clicando en la imagen más abajo para tenerte siempre actualizado sobre los nuevos contenidos del blog:

Top es una herramienta que nos proporciona información de los procesos que se están ejecutando en tiempo real.

Top es una herramienta que nos proporciona información de los procesos que se estan corriendo en ese momento en tiempo real con valors de uso de CPU, memoria, swap y la posibilidad de manupular procesos. Presenta una interfaz simple que cuenta con varias partes.

Para ejecutar este comando solo tenemos que colocar en la consola:

# top

Y nos vamos a encontrar con algo como esto:

Se divide en dos la interfáz entre la cabecera y la lista de procesos corriendo en ese momento. La cabecera además se divide en 5 lineas:
  • Primera linea: Muestra una serie de datos referidos al sistema.
    • “02:51:37″: Es la hora actual de este caso
    • “up 59 min”: Es el tiempo en minutos que el sistema esta corriendo en este caso
    • “2 users”: Cantidad de usuarios conectados en ese momento
    • “Load average”: Los numeros indican el estado de uso del CPU. Si los numeros son menores a “1″ esto quiere decir que el CPU no tiene que esperar para poder ejecutar una instruccion. Si esta por encima de “1″ quiere decir que es necesario que el CPU necesite esperar para ejecutar una instruccion. Los tres numeros muestran el average cada 5, 10 y 15 minutos respectivamente.
  • Segunda linea: Muestra el total de procesos corriendo y los divide por estados, “Running”, “Slepping”, “Stopped”, “Zombie”.
  • Tercera linea: Muestra el uso de CPU en ese momento.
    • “%us”: muestra el uso de cpu del usuario
    • “%sy”: muestra el uso de cpu del sistema.
    • “%id”: muestra el uso de cpu disponible para utilizar.
    • “%wa”: muestra en porcentaje el tiempo en espera del cpu para manejo de I/O.
  • Cuarta linea: Muestra valores referentes a la memoria fisica del equipo (los valores pueden ser algo enañosos).
    • Tota: Es el valor total de la memoria fisica
    • Used: Es el valor de la memoria utilizada
    • Free: Es el valor de la memoria libre
    • Buffered: Es el valor de memoria fisica que esta en el buffer de memoria.
  • Quinta linea: Muestra valores referentes al uso de la memoria SWAP. Es similar a la cuarta linea en cuanto a los datos que proporciona salvo por un solo cambio que al final de la linea muestra la memoria que esta cacheada.
Ahora bien, como puedo calcular la memoria libre que tengo en el sistema?. Para eso lo que tenemos que hacer es sumar una serie de valores que nos presenta el comando top. La memoria disponible es la suma del valor “buffered” en la cuarta linea y el valor cached” de la quinta linea:
Memoria RAM disponible = Cached(12964k) + Buffered(153762k)
Para averiguar cuanta memoria estan utilizando los programas:
Memoria RAM utilizada por programas = Used (1942256) – (Cached(12964k) + Buffered(153762k))
Luego, en la parte inferior de la pantalla se encuentra la lista de procesos corriendo en el sistema en orden descendente. Cada linea cuenta con los siguientes datos:
  • PID: Process ID del proceso
  • USER: Usuario que esta corriendo dicha aplicacion
  • PR: Prioridad del proceso
  • NI: Valor por el cual se establece una prioridad para el proceso
  • VIRT: Total de la memoria virtual usada
  • RES: Resident task size
  • SHR: Estado del proceso. S (sleeping), D (uninterruptible sleep), R (running), Z(zombies), or T (stopped or traced)
  • %CPU, %MEM: Porcentajes de memoria y cpu utilizados en ese momento
  • Time: El tiempo de uso del procesador para ese proceso
  • Command: El comando que esta siendo ejecutado por el Daemon
Dentro del programa podemos interactuar con el con varias opciones:
  • k -> Si se quiere matar el proceso, luego debemos ingresar el numero de su PID.
  • r -> Cambia la prioridad del proceso
  • O (upercase) -> Muestra las posibles columnas que podemos agregar a la lista de procesos
  • 1 -> Muestra la información de todos los cores
  • z o b -> Agregan colores a la interfaz
  • c -> Muestra el path absoluto del binario que se esta ejecutando.
  • n -> nos permite reducir la lista a “n” procesos.
  • N (upercase) -> Ordena los procesos por PID
  • A (upercase) -> Ordena los procesos por aparicion, primero se encuentran los mas nuevos
  • P (upercase) -> Ordena los procesos por uso de CPU, esta opcion es la default
  • M (upercase) -> Ordena los procesos por memoria residente
  • T (upercase) -> Ordena los procesos por tiempo.
  • W (upercase) -> Guarda la configuracion que hicimos
  • q -> Salir de Top
Además top cuenta con una serie de switches además de las opciones anteriores:
  • top -u usuario -> Muestra los procesos que estan corriendo con ese usuario y sus valores
  • top -p PID -> muestra el proceso seleccionado y sus valores
  • top -n numero -> Numero es la cantidad de iteraciones que va a tener el comando y luego se cerrara
  • top -d numero -> “Numero” es el tiempop en segundos que va a esperar el comando para refrescar la lista.
  • top -b -> Batch mode, ideal para mandar resultados desde top a otros programas

Si te ha gustado el artículo inscribete al feed clicando en la imagen más abajo para tenerte siempre actualizado sobre los nuevos contenidos del blog:

El comando ps muestra por pantalla un listado de los procesos que se están ejecutando en el sistema.

comando psPs ("process status", estado de procesos en idioma inglés) es un comando asociado en el sistema operativo UNIX (estandarizado en POSIX y otros) que permite visualizar el estado de un Proceso (informática).

El comando ps muestra por pantalla un listado de los procesos que se están ejecutando en el sistema.

Si no añadimos ningún parámetro, ps mostrará los procesos del usuario con el que estamos logueados.
Generalmente en cualquier distribución de GNU/Linux se incluye la versión de ps que acepta diferentes tipos de opciones: las opciones UNIX que son precedidas por un guión (dash), las opciones BSD que no utilizan guión, y las opciones GNU largas que se preceden por dos guiones.
ps
Estas opciones se pueden mezclar, pero a veces ocasionan conflictos o existen opciones sinónimas que producen los mismos resultados. Por ejemplo "ps -aux" muestra todos los procesos pertenecientes al usuario llamado "x", ya que no suele existir un usuario llamado "x" ps lo interpreta como el comando "ps aux" e imprime una advertencia :D

Por defecto ps sólo muestra los procesos con el mismo user id efectivo (EUID) que el del usuario que lo ejecuta. Cuando utilizamos ps con las opciones "aux" el resultado es:
  • a: eliminar la restricción BSD "only yourself" para agregar procesos de otros usuarios
  • u: utilizar el formato orientado al usuario
  • x: eliminar la restricción BSD "must have a tty" para agregar procesos que no tengan una tty asociada
De esta forma seleccionamos todos los procesos en el sistema y los mostramos en el formato orientado al usuario.

Captura de pantalla salida ps.
Comando
    ps [modificadores] [condición]
Donde modificadores es opcional, y puede tomar los siguientes valores:

Los siguientes modificadores no toman el parámetro condición:
    -A: Muestra todos los procesos (de todos los usuarios en el sistema).
    -a: Muestra todos los procesos de una [tty] determinada.
    -d: Muestra todo excepto los líderes de la sesión.
    -e: Muestra todos los procesos (equivalente a -A).
    T: Muestra todos los procesos de la terminal actual.
    a: Muestra todos los procesos de la terminal actual incluyendo los de otros usuarios.
    g: Muestra todos los procesos incluyendo grupos líderes (obsoleta excepto en sunOs).
    r: Muestra solamente los procesos corriendo.
    x: Muestra los procesos en un estilo BSD (sin controlar la [TTY]).
comando ps
Los siguientes modificadores toman el parámetro condición:
    -N: Muestra todos los procesos excepto los que encajan con la condición (equivalente a --deselect).
    -C: Muestra los procesos que tienen como nombre la condición.
    -G: Muestra los procesos que tienen como grupo (nombre de grupo o id) la condición.
    -P: Muestra los procesos que tienen como [Identificador de proceso] la condición.
    -S: Muestra los procesos que tienen como sesión la condición.
    -U: Muestra los procesos que tienen como usuario (nombre de grupo o id) la condición.
Existen distintos modificadores admitidos según la versión del comando ps que se esté usando en el sistema (BSD, POSIX, GNU, etc.)
Entre muchas opciones que tiene ps, es posible ordenar la salida de acuerdo a una columna, para esto se debe utilizar la opción gnu larga "--sort", por ejemplo para ordenar por tiempo de CPU (si deseamos determinar qué proceso ha utilizado más CPU) seleccionamos el código "cputime", correspondiente a la columna TIME:
ps aux --sort cputime
comando ps

Si te ha gustado el artículo inscribete al feed clicando en la imagen más abajo para tenerte siempre actualizado sobre los nuevos contenidos del blog:

Vmstat comando que nos permite obtener un detalle general de los procesos del CPU.

Vmstat es un comando que nos permite obtener un detalle general de los procesos, E/S, uso de memoria/swap, estado del sistema y actividad del CPU. Es esencial para entender que esta pasando en tu sistema, detectar cuellos de botella, etc..

Para usarlo, podemos correrlo sin parámetros, y obtendremos algo similar a esto:
La primera línea es simple, se divide en seis categorías: procesos, memoria, swap, E/S, sistema y CPU.
La segunda un detalle abierto de cada categoria superior.

Los campos mostrados en relación a los a procesos son:
r: El número de procesos ejecutables esperando para acceder al CPU.
b: El número de procesos en un estado dormido contínuo.
Los campos relacionados a la memoria son:
swpd: La cantidad de memoria utilizada.
free: La cantidad de memoria libre.
buff: La cantidad de memoria utilizada por las memorias intermedias.
cache: La cantidad de memoria utilizada como caché de páginas.
Los campos relacionados a swap son:
vmstat
si: La cantidad de memoria intercambiada desde el disco.
so: La cantidad de memoria intercambiada hacia el disco.
Los campos relacionados con E/S son:
bi: Los bloques enviados a un dispositivo de bloques.
bo: Los bloques recibidos desde un dispositivo de bloques.
Los campos relacionados al sistema son:
in: El número de interrupciones por segundo.
cs: El número de cambios de contexto por segundo.
Los campos relacionados al CPU son:
us: El porcentaje de tiempo que el CPU ejecutó código de nivel del usuario.
sy: El porcentaje de tiempo que el CPU ejecutó código de nivel del sistema.
id: El porcentaje de tiempo que el CPU estaba desocupado.
wa: Esperas de E/S.
Si se ejecuta el comando “vmstat” sin opciones, nos muestra una unica línea, que contiene promedios calculados desde la última vez que se arrancó el sistema.
Si ejecutamos “vmstat 1″ muestra una nueva línea de utilización de datos cada segundo, mientras que el comando “vmstat 1 10″, muestra una nueva línea por segundo, pero sólo por los próximos 10 segundos.

Si te ha gustado el artículo inscribete al feed clicando en la imagen más abajo para tenerte siempre actualizado sobre los nuevos contenidos del blog: