Python是否仅使用mem缓存内存进行进程?

Python是否仅使用mem缓存内存进行进程?,python,numpy,memory,parallel-processing,memcached,Python,Numpy,Memory,Parallel Processing,Memcached,是否有一些库可以导入,以使我的所有本机python执行都能够读写本地变量到memcached instean?因此,没有使用本地内存没有RAM 假设我有以下机器: Machine0a有100GB的内存专门用于托管我的memcached Machine0b有100GB的内存专门用于托管我的memcached Machine0c有100GB的内存专门用于托管我的memcached Machine1有.01GM内存和一堆内核。 Machine2有.01GM内存和一堆内核 我基本上希望能够编写以下脚本:

是否有一些库可以导入,以使我的所有本机python执行都能够读写本地变量到memcached instean?因此,没有使用本地内存没有RAM

假设我有以下机器:

Machine0a有100GB的内存专门用于托管我的memcached Machine0b有100GB的内存专门用于托管我的memcached Machine0c有100GB的内存专门用于托管我的memcached Machine1有.01GM内存和一堆内核。 Machine2有.01GM内存和一堆内核

我基本上希望能够编写以下脚本:

在Machine1上,我每小时运行以下cron作业:

import pylibmc
import onlyusememcached

#Have python make ALL process VARIABLES in memcached
#   with some unique name that only this program recognizes
really_big_number = 100000000 #-> THIS IS IN THE MEMCACHED 
#   Under the hood this is stored in memcached as    `Machine1ID.ProcessID.GlobalScopeID.really_big_number`

a = []
#   Under the hood `a` is stored in memcached as    `Machine1ID.ProcessID.GlobalScopeID.a`
for x in range(really_big_number):
    #   Under the hood `x` is stored in the memcached as `Machine1ID.ProcessID.GlobalScopeID.forloopScopeID.x``
    a.append([0,1,2,3,4,5,6,7,8,9])

#Save `a` as a shared variable with a normal memcached call:
mc = pylibmc.Client(["127.0.0.1:11211"], binary=True)
mc['SharedA'] = a 
在Machine2上,我每小时+5分钟运行一次以下cron作业:

import pylibmc
import onlyusememcached
import numpy

#Go get my shared `a` from the memcached
mc = pylibmc.Client(["127.0.0.1:11211"], binary=True)
a =  mc['SharedA']
#   `a` is now copied into memcached as `Machine2ID.ProcessID.GlobalScopeID.a`

b = numpy.cov(a) 
#   `b` is now stored into memcached as `Machine2ID.ProcessID.GlobalScopeID.b`
#   numpy operations ALL happen with ONLY memcached memory 
#   so Machine 2 doesn't need any memory of its own to perform the cov calculations
#   Machine 2 ONLY needs the processor
我希望成为一个懒惰的人,并重复使用常规的python脚本,这些脚本自己进行存储并检索到memcached,而不是本地机器。 我希望OnlySememCached模块对我来说是聪明的,以便对导入该模块的所有机器和进程保持作用域而不会发生冲突。 我想买一堆专用于存储大量内存的机器。 我想买一堆专门用于加工的机器


这个模块存在吗?

我认为构建这个模块的方法实际上并没有那么困难。 我所要做的就是编写一个c库,覆盖c内存分配函数

python默认的内存分配函数在这里,它们都只使用本机C内存分配函数

c默认内存分配函数为malloc和free:

当然还有实现memcached的c库

所以我所要做的就是创建自己的新malloc和free函数,并正确导入它们

#define malloc(x) ....
#define free(x) ....

哪种方法使用libmemcached而不是访问RAM

是我误解了什么,还是你想用memcached替换RAM?!我很确定没有这个模块,因为它会让事情变得非常缓慢…嗯。。。速度的瓶颈是到缓存的mem的连接速度。我理解直接连接到机器中的ram与连接到memcached->的速度不同,但是能够做到这一点可以轻松地扩展一些大型计算,而无需非常聪明。聪明是工作,如果我没有太多,我就不想工作。将数据从直接连接到CPU的内存(具有极高带宽)卸载到网络内存将是一个巨大的性能瓶颈。特别是考虑到numpy使用低级存储,np数组存储为C样式的数组,而不是python对象数组,因此对整个数组的操作要便宜得多。想象一下,当增加网络开销时,速度会有多慢。如果你对这种速度没有意见,你是否考虑过让Python开始将内存交换到磁盘?你打算如何让你的计算机将Memcached作为内存来处理?我认为这需要一些非常糟糕的底层工作,比如修改内核的页面错误处理程序和重新编译操作系统。这可能需要比您试图避免的更多的专业知识。另外,不要忘记Memcached是一个缓存。它将逐出条目。你需要以某种方式处理驱逐问题。我不是反对者,但我猜反对者是谁,因为这个答案严重低估了实现这些malloc/free函数的难度,Memcached是一个可怕的工具,在使用远程RAM时,就像它是本地的一样,甚至使用了更合适的工具,将远程RAM用作本地RAM将非常缓慢。