主动对象中间件
PyActive的Python项目详细描述
#pyactive
##说明
pyactive是python中actor模型的一种新的面向对象实现。 在我们的方法中,新颖之处在于与面向对象概念的紧密集成 大大简化了此库的使用。
尤其是,pyactive在actors中提供了非阻塞的同步调用。不像 我们的库提供了只提供异步调用的传统actor框架 尊重并维护消息传递并发模型的同步非阻塞调用。 为此,我们使用线程和 微线程(无堆栈)。我们在一些复杂的例子中,比如和弦叠加,证明了我们的方法 大大降低了问题的复杂性和代码行数(loc)。
pyactive采用纯面向对象的方法调用方法。 其他actor框架使用特殊符号(!)用于发送消息 以及模式匹配或条件接收它们。相反,pyactive 中间件透明地将消息映射到方法,从而实现更好的 代码表达能力。
pyactive还包括高级抽象,如远程引用传递、一对多调用抽象,以及 异常处理以简化分布式算法的实现。pyactive也是一个分布式对象中间件 它还提供远程分派器,支持远程方法调用。最后,pyactive的日志机制可以生成uml序列图 这有助于理解使用面向对象方法的参与者之间的交互。
pyactive现在在两个平台上提供:在无堆栈python之上和python线程之上使用协作微线程 使用标准线程库。我们验证了pyactive对代码分布式算法的性能和表现力。
##基本方法摘要
- 异步:用于指示该方法可以接收异步远程调用。
- sync:用于指示该方法可以接收同步远程调用。 所以有必要退货。
- parallel:它通过启动额外的控制线程来保证当前方法不会在同步调用中被阻塞。我们的库确保一次只有一个线程可以访问被动对象,从而确保不会出现并发冲突。
- ref:此方法用于激活远程引用层。这意味着一个参数或结果是参与者。因此,此注释保证通过引用传递。
##基本功能
- 启动控制器:用于选择模块。现在,我们可以选择 在"atom_thread"和"tasklet"之间。注意这个决定可以改变 你需要的python版本。例如,"tasklet"模块需要无堆栈的python。
- 启动:用于抛出初始化程序的主函数。一旦此功能结束,程序将终止。
- 永远服务。它就像启动功能一样使用,但一旦功能结束,程序就会继续。
##如何使用pyactive?
在本节中,我们将解释使用此中间件所需的全部内容。这很容易!
要求 *如果只使用threads模块,则只需要python 2.7
- 如果需要使用stackless版本,则需要使用 无堆栈python
您可以在http://www.python.org/download/" rel="nofollow">http://www.python.org/download/
一旦安装了python,下一步就是安装stackless python。 您可以在以下网址下载Stackless Python:[http://www.stackless.com/]
pyactive包含一些示例和测试。您可以运行以下测试:
< Buff行情> $>;cd/pyactive $>;python./示例/hello_world/test_async.py $>;python./examples/registry/first.py使用"启动控制器"功能选择模块。如今, 您可以输入参数'tasklet'或'atom_thread'来选择模块。 请注意,选择tasklet模块时,需要stacklees python。
##展望用途和未来工作
- 分布式算法的仿真与实现:pyactive can 大大简化了分布式算法的开发。它是 可以在一台机器上模拟算法 部署在试验台上。我们以前实现过和弦 对于基于事件的传统p2p模拟器(planetsim),代码是 理解和跟随复杂。另一方面,我们的实施 使用pyactive更简洁,并且与原始算法类似 在和弦文件中提出。主要原因是pyactive明显地分离了 通信代码来自算法代码内部的方法。我们计划使用pyactive 在我们的分布式系统课程和对等网络课程中。
- web中间件:pyactive有很大的潜力可以简化rest的开发 和web rpc平台。使用绿色的web异步网络库 线程。我们甚至正在考虑在 一个图书馆。特别是,我们计划重写 openstack swift基于已经使用绿色线程的wsgi python服务器 以提高性能。但目前的密码是纠缠的交流, 编组和分布式存储算法。pyactive可以分离这些层 并使代码性能和易于理解和修改
- 多核编程:消息传递并发性的保证之一 是多核并发编程的未来。Erlang提供真正的 对称多处理(SMP)下不同核上的并行性。他们主要 为erlang vm添加了多线程支持,因此 进程调度程序可以位于其本机线程中。在我们的例子中,stackless 也允许不同的微线程生活在它们自己的线程中,或者 过程。但是,由于 gil(全局解释器锁)。相反,我们可以支持多核 使用python多处理库编程。
- 分布式延续:我们概述了未来与 pyactive中rpcs和分布式连续化的结合。无堆叠蟒蛇 允许在当前帧中序列化微线程。因此是可行的 创建新的调用抽象来支持 不同的主机。