Queue Server

1 view
Skip to first unread message

Wilton de Oliveira Garcia

unread,
May 17, 2010, 5:16:34 PM5/17/10
to Tio Project Brasil
Rodrigo,

Primeiramente parabéns pela apresentação, gostaria de usar o Tio para
processamento de filas utilizando Python, você poderia me passar as
linhas de código para criar uma fila e assinar esta fila.

valeu!!!

Wilton

Rodrigo Strauss

unread,
May 18, 2010, 8:15:08 AM5/18/10
to tio-proje...@googlegroups.com
Tenha o Tio rodando. No Windows, já existe um build pronto disponível
para download. Para Linux, você precisa baixar os fontes e compilar
(precisa ter o pacote dev do boost instalado).

O client de Python está na raiz dos fontes,
http://code.google.com/p/tio/source/browse/tioclient.py

Para um exemplo de como conectar no Tio, veja
http://code.google.com/p/tio/source/browse/tioclient.py#552. O ideal é
usar um "volatile/list" como fila. Quem usa a fila simplesmente insere
as mensagens na lista usando o método append (exatamente igual ao list
do Python). Quem recebe as mensagens tem duas opções: ou assina a
lista usando o método subscribe, ou usa o WaitAndPop, que dispara um
evento quando houver mensagens disponíveis.

Producer
{{
import tioclient
man = tioclient.Connect('tio://127.0.0.1:6666')
container = man.CreateContainer('xpto', 'volatile/list')

for x in range(10):
container.append('value %d' % x, 'metadata')
}}

Consumer
{{
import tioclient
man = tioclient.Connect('tio://127.0.0.1:6666')
container = man.OpenContainer('xpto')

def OnNewItem(container, event_name, key, value, metadata):
print value

# if you want to receive events for all messages in the list, use start=0
container.subscribe(sink=OnNewItem, event_filter='push_back', start = None)
}}

Mais detalhes em http://code.google.com/p/tio/wiki/TioAsQueueServer e
http://code.google.com/p/tio/wiki/TioAsClusterCoordinator

Rodrigo Strauss
http://www.1bit.com.br



2010/5/17 Wilton de Oliveira Garcia <wilt...@gmail.com>:

Wilton de Oliveira Garcia

unread,
May 18, 2010, 8:31:22 AM5/18/10
to tio-proje...@googlegroups.com
Rodrigo,

Ficou muito claro, obrigado pelo suporte.

Valeu

WIlton
--
Wilton de Oliveira Garcia
Desenvolvedor Web
Cel : 61321326

Wilton de Oliveira Garcia

unread,
May 27, 2010, 9:27:21 PM5/27/10
to Tio Project Brasil
Rodrigo,

Consegui fazer e estou muito satisfeito com o resultado, penei um
pouco para ententer o wait_and_pop, mas deu tudo certo, abaixo código
que estou usando para retirar da fila e salvar no Mongodb:

# -*- coding: iso-8859-1 -*-
import tioclient, pymongo, json, time
from StringIO import StringIO
man = tioclient.Connect('tio://192.168.1.101:6666')
container = man.OpenContainer('fst')

def OnNewItem(container, event_name, key, value, metadata):
container.wait_and_pop_next(sink=RemoveItem)

def RemoveItem(container, event_name, key, value, metadata):
now = time.gmtime()
print ("Recive %s in %s"% (value, time.strftime(" %X: ",now) ))
print metadata
obj = json.load(StringIO(metadata))
connection = pymongo.Connection("192.168.1.100", 27017)
Save(obj,connection)
Update(obj,connection)

def Save(obj,connection):
db = connection.bireme
exp = db.lilacs_fst.find({"term": obj[0]}).limit(1)
if not exp.count()>0:
db.lilacs_fst.save({"term": obj[0], "ind":[]})

def Update(obj,connection):
exp = db.lilacs_fst.find({"term": obj[0],"ind":obj[2]}).limit(1)
if not exp.count()>0:
db.lilacs_fst.update({"term": obj[0]}, {'$push': { "ind":
obj[2]}})

# if you want to receive events for all messages in the list, use
start=0
container.subscribe(sink=OnNewItem, event_filter='push_back', start=0)

man.RunLoop()


Valeu!!!

Wilton


On May 18, 9:15 am, Rodrigo Strauss <rodr...@1bit.com.br> wrote:
> Tenha o Tio rodando. No Windows, já existe um build pronto disponível
> para download. Para Linux, você precisa baixar os fontes e compilar
> (precisa ter o pacote dev do boost instalado).
>
> O client de Python está na raiz dos fontes,http://code.google.com/p/tio/source/browse/tioclient.py
>
> Para um exemplo de como conectar no Tio, vejahttp://code.google.com/p/tio/source/browse/tioclient.py#552. O ideal é
> usar um "volatile/list" como fila. Quem usa a fila simplesmente insere
> as mensagens na lista usando o método append (exatamente igual ao list
> do Python). Quem recebe as mensagens tem duas opções: ou assina a
> lista usando o método subscribe, ou usa o WaitAndPop, que dispara um
> evento quando houver mensagens disponíveis.
>
> Producer
> {{
> import tioclient
> man = tioclient.Connect('tio://127.0.0.1:6666')
> container = man.CreateContainer('xpto', 'volatile/list')
>
> for x in range(10):
>         container.append('value %d' % x, 'metadata')
>
> }}
>
> Consumer
> {{
> import tioclient
> man = tioclient.Connect('tio://127.0.0.1:6666')
> container = man.OpenContainer('xpto')
>
> def OnNewItem(container, event_name, key, value, metadata):
>         print value
>
> # if you want to receive events for all messages in the list, use start=0
> container.subscribe(sink=OnNewItem, event_filter='push_back', start = None)
>
> }}
>
> Mais detalhes emhttp://code.google.com/p/tio/wiki/TioAsQueueServerehttp://code.google.com/p/tio/wiki/TioAsClusterCoordinator
>
> Rodrigo Strausshttp://www.1bit.com.br
>
> 2010/5/17 Wilton de Oliveira Garcia <wilto...@gmail.com>:

Rodrigo Strauss

unread,
May 28, 2010, 9:00:31 AM5/28/10
to tio-proje...@googlegroups.com
Legal!

Não sei se você viu, mas eu criei um diretório de exemplos nos fontes,
e tem um exemplo de cluster de cálculo usando o wait and pop e em
Python. Além de ter bem mais documentação agora.

Rodrigo Strauss
http://www.1bit.com.br


2010/5/27 Wilton de Oliveira Garcia <wilt...@gmail.com>:

Reply all
Reply to author
Forward
0 new messages