mure
文件大小: unknow
源码售价: 5 个金币 积分规则     积分充值
资源说明:python actor framework
### Mure
Simplified actor concurrency DSL for python. Includes a distributed EventEmitter
Mure stands for swarm in japanese.

### Depends on
gevent for evented I/O
kombu for transport abstraction
pybonjour for automatic configuration

### Actor Example
    from mure.core import worker, send_message, connect, disconnect

    @worker('awesomenator')
    def be_awesome(message):
        send_message('call_me_whenever_awesome_is_ready', 'awesomenator is being awesome, message: %s' % message)

    @worker('call_me_whenever_awesome_is_ready')
    def omg_awesome(message):
        print 'seems like someone was awesome: %s ' % message

    if __name__ == "__main__":
        from time import sleep
        connect()
        sleep(10)
        disconnect()

from python, ipython or bpython:

    from mure.core import send_message, connect, disconnect
    connect()
    send_message('awesomenator', 'release the kraken')
    disconnect()

### Distributed Event Emitter example
It works as node.js EventEmitters, inspired by pyee (https://github.com/jesusabdullah/pyee).
The same syntax applies, it packs the message as json, with a node id.
Internally it avoids feedbacking the message back to the original sender.
Run this example in different terminals

    from mure.dee import DistEventEmitter
    import os, json, time
    from gevent import sleep, spawn

    dbus = DistEventEmitter()

    def producer():
        count =0
        while(True):
            count = count +1
            print count
            dbus.emit("message", "hnam %d" % count) 
            sleep(5)


    def join_listener(msg):
        print "%s" % msg

    def msg_listener(msg):
        print "received message: %s" % msg

    def main():
        dbus.emit('join', "oeam")
        dbus.on('message', msg_listener)
        producer()

    if __name__ == "__main__":
        main()

### node.js binding

    If you are using kombu + redis there is a binding on node.js/ dir that reproduces its protocol on a kind of distributed event emitter. 
    Basically it is a 2 or more channel redis based kombu port for node.js integrated to EventEmitter.  

On node.js
    
    var dee = require("./dee")
    dee = dee.create_dee();                                                         
    dee.worker("/workers/jazz", function(w) { console.log(w) });                    
    dee.send_message("/workers/delicious", "wot");

On Python

    from mure.dee import DistEventEmitter
    dbus = DistEventEmitter()

    def msg_listener(msg): 
        print "received message: %s" % msg                                          
                                                                                
    def main():
        dbus.on('/workers/delicious', msg_listener)    

    if __name__ == "__main__":
        main()

    Run examples/dee_test.py in a term and then node.js/test.js to check the communication. This example is a self-counting event emitter with message exchange between two processes. To the original intent redis support is enough (just cheap signaling to a node.js process that could lose a step)

### More examples
    Check examples/ dir, run slacker.py in a terminal and play around

### Why ?
    This is an compilation of the same code I've been using at different projects.
    Basically it's an actor framework. Can't get easier than that.

### Future
pybonjour, otp interface, restmq transport, cluster status, node.js/ruby library


本源码包内暂不包含可直接显示的源代码文件,请下载源码包。