Ger*_*nuk 6 python distributed
我计划编写一个简单的数据流框架,它基本上由对象的惰性方法调用组成.如果我考虑过分布式编程,那么在Python中启用它的最简单方法是什么?没有我做网络编程的任何透明解决方案?
或者首先,我如何在Python中使用多核处理器?
Oha*_*had 14
惰性方法调用对象
真的可以是任何东西,所以让我们制造它:
祝你好运!python具有远程过程调用的最佳实现之一: RPyC.
只需运行服务器(双击文件,查看教程),
打开翻译并:
import rpyc
conn = rpyc.classic.connect("localhost")
data_obj = conn.modules.lazyme.AwesomeObject("ABCDE")
print(data_obj.calculate(10))
Run Code Online (Sandbox Code Playgroud)
和懒惰的版本(异步):
# wrap the remote function with async(), which turns the invocation asynchronous
acalc = rpyc.async(data_obj.calculate)
res = acalc(10)
print(res.ready, res.value)
Run Code Online (Sandbox Code Playgroud)
您有一个已定义的工作单元,比如复杂的图像处理.你所做的大致是创造Node,它做实际工作(也就是说,拍摄图像,做操作,并返回结果),收集结果的人(a Sink)和创作作品的人(Distributor).
看看芹菜吧.
如果它的规模非常小,或者您只是想玩它,请查看包中的Pool对象multiprocessing:
from multiprocessing import Pool
p = Pool(5)
def f(x):
return x*x
print(p.map(f, [1,2,3]))
Run Code Online (Sandbox Code Playgroud)
真正懒惰的版本:
print(p.map_async(f, [1,2,3]))
Run Code Online (Sandbox Code Playgroud)
返回一个Result对象,可以检查结果.
一些多层次的,不仅仅是火灾和忘记复杂的数据操作,或者是一个多步骤处理用例.
在这种情况下,您应该使用诸如ZeroMQ或RabbitMQ之类的Message Broker .它们允许您轻松地在多个服务器上发送"消息".
它们可以帮助您避免TCP域的恐怖,但它们有点复杂(有些像RabbitMQ,需要为Broker提供单独的进程/服务器).但是,它们可以为您提供更精细的数据流控制,并帮助您构建真正可扩展的应用程序.
虽然不是数据分发本身,但它是Web服务器后端最热门的趋势:使用"绿色"线程(或事件或协同程序)将IO繁重任务委派给专用线程,而应用程序代码忙于最大化 - 出CPU.
| 归档时间: |
|
| 查看次数: |
9309 次 |
| 最近记录: |