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>: