Worker job usando Nodej.s

En alguno proyectos es necesario tener una tarea ejecutando cada cierto tiempo, la cual estaria haciendo desde un heardbeat hasta una consulta en una base de datos para consumir un web service en fin muchas cosas. En este tutorial estaré mostrando una alternativa al poderoso cron de Linux pero esta vez con nodejs.

El ejemplo consta de 2 archivos un archivo server.js que es nuestro servidor js y otro archivo llamado task.js que es nuestro cron.

Page1__Lucidchart

Una vez inciado el cron el envio de mensajes se realiza de la siguiente manera

 childProcess.send({values:[]}) 

Page2__Lucidchart

Server.js

var http = require('http');
var process = require('child_process');

var app = http.createServer(function(req,res){
	child.send({'key':'value'})

	res.end('hello');
});

console.log('server running');

// se realiza el fork del nuevo proceso
var child = process.fork('task.js');

// dispara el evento message hacia el fork
child.send({'key':'valor'})
console.log('proceso hijo iniciado');

app.listen(3000);

Task.js

var context = [];

(function(context){
    setInterval(function(){
        var value = context.pop()
        console.log('iteraciones ' + value);
    },1000);
})(context);

process.on('message',function(value){
    console.log('mensaje recibido');

    context.push(value);
});

Esta seria otra opcion para el task.
Task2.js

var context = [];

var process = function(){
    var value = context.pop()
    console.log('iteraciones ' + value);
}

process.on('message',function(value){
	console.log('mensaje recibido');
	context.push(value);
});

Mi recomendacion es que para algun proceso ligero/pesado y no quieras tener que incluir algun nuevo modulo de node.js o simplemente quieres manejarlo tu mismo lo intententes de esta manera.

Referencias

Child Process Nodejs

Source 

Sending objects

Fork process

Nota: Si requiren algo mas complejo con respecto a este tema recomiendo usar este modulo modulo.

Sigue leyendo

Requests Una Libreria de Python para Python

Cuantos de nosotros no hemos estado trabajando con httplib2 y tenido que escribir código no Python (No pythonic way) mientras programamos algún proyecto el cual requiera cierta comunicación externa y nuestro código no queda como queremos, para ayudarnos ahi llega  Request.

Bueno para no cansarles mas el cuento he aqui algunos ejemplos de esta maravillosa libreria:

Simple GET request

 import json
 import requests
 resultado = requests.get('url.api') #awesome verdad?

Basic Auth request

## Y asi es un simple GET request con basic auth
    r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
    r.status_code
    200
    r.headers['content-type']
    'application/json; charset=utf8'
    r.encoding
##

Post request con un json payload:

##
    import json
    import requests
    rawPayload = {'nombre' : 'nombre'}
    resultado = requests.post('url.api',data=json.dumps(rawPayload))
##

Post request para enviar un archivo:

##
    import requests
    file = open('tu_archivo.file','r')
    result = requests.post('url.api',file={ 'file':file })
##

Referencias:

Presentacion

Documentacion oficial