El siguiente multiprocesamiento simple de una función cuadrada funciona bien:

from multiprocessing import Pool

class A(object):

    def square(self, x):
        return x * x

    def test(self):
        pool = Pool()
        result = pool.map(self.square, range(5))
        return result

Pero cuando agrego una inicialización de un modelo de Gurobi en la clase como esta,

from multiprocessing import Pool
from gurobipy import *

class A(object):

    def __init__(self):
        self.b = Model()

    def square(self, x):
        return x * x

    def test(self):
        pool = Pool()
        result = pool.map(self.square, range(5))
        return result

A().test()

Devuelve el siguiente error:

File "model.pxi", line 290, in gurobipy.Model.__getattr__ (../../src/python/gurobipy.c:53411)
KeyError: '__getstate__'

Una versión en serie con Gurobi funciona bien:

from gurobipy import *

class A(object):

    def __init__(self):
        self.b = Model()

    def square(self, x):
        return x * x

    def test(self):
        res = [self.square(i) for i in range(5)]
        return res

A().test()
1
J. Lin 28 may. 2018 a las 20:33

1 respuesta

La mejor respuesta

La API de Gurobi no admite compartir un solo entorno de Gurobi en múltiples procesos o hilos. Si desea resolver múltiples módulos en múltiples procesos o hilos, debe crear explícitamente múltiples entornos Gurobi en cada proceso o hilo.

1
Greg Glockner 12 jun. 2018 a las 02:33