是否可以将 python 对象(特别是 sklearn 模型)存储在内存映射文件中



我有几个占用大量内存的大型对象(sklearn模型),我想在几个进程之间共享它们。有没有办法做到这一点?

  • 它必须是"活动"对象,而不是序列化版本
  • 我知道有一个 numpy 数组的内存映射版本,它负责模型内存的很大一部分 - 但使用它们将需要对 sklearn 源代码进行重大更改,这将很难维护
在从

同一 python 脚本启动进程的条件下,下面是一个创建第二个进程并在两个进程之间共享变量的示例。 对此进行详细说明以创建一些流程很简单。 请注意用于创建和访问共享变量和锁的构造。 我在算术过程中插入了一个循环来生成一些 CPU 使用率,以便您可以监控并查看它在多核或多处理器平台上的运行方式。 还要注意使用共享变量来控制第二个进程,在本例中告诉它何时退出。 最后,共享对象可以是值或数组,请参阅 https://docs.python.org/2/library/multiprocessing.html

#!/usr/bin/python
from time import sleep
from multiprocessing import Process, Value, Lock
def myfunc(counter, lock, run):
    while run.value:
        sleep(1)
        n=0
        for i in range(10000):
            n = n+i*i
        print( n )
        with lock:
            counter.value += 1
            print( "thread %d"%counter.value )
    with lock:
        counter.value = -1
        print( "thread exit %d"%counter.value )
# =======================
counter = Value('i', 0)
run = Value('b', True)
lock = Lock()
p = Process(target=myfunc, args=(counter, lock, run))
p.start()
while counter.value < 5:
    print( "main %d"%counter.value )
    n=0
    for i in range(10000):
        n = n+i*i
    print( n )
    sleep(1)
with lock:
    counter.value = 0
while counter.value < 5:
    print( "main %d"%counter.value )
    sleep(1)
run.value = False
p.join()
print( "main exit %d"%counter.value)

相关内容

  • 没有找到相关文章

最新更新