But I think there are also some inefficiencies in how the FVA is managed that can lead to not using the previous solution basis.
What improvements do you have in mind? Each process gets a global model object which is used to solve N problems. So the previous solutions should be used. We also run all minimizations in one batch and all maximizations in another batch. So that seems like a decent implementation to me.
I see now that we start a new process pool for each objective direction which is probably why you saw four models being copied @dotPiano_gitlab. So that's something that can be improved.
If I understand correctly, the issue lies in moving data between multiple processes. Why did you opt for multiprocessing rather than multithreading? In the latter copying the models would be much faster.
model.reactions.rxn00974.annotationfor a BiGG identifier. You could then simply rename the IDs of your reactions, compartments, and metabolites so that you might be able to use the same map?