Consider C++ classes. The first one is a branch class:
class Branch{
map<string,double> properties;
}
i.e. a branch object is only caracterised by its properties, which are stocked in a map. Each property has a name and is associated with a double value. The second one is a tree class, composed of many branches:
class Tree{
vector<*Branch> tree;
void addBranch(int index); //adds a branch to tree vector at index
void removeBranch(int index); //removes branch at index and and its descendents
double getProperty(int index, string name);//gets value of property name of branch at index
void addProperty(int index, string name, double value);
void setProperty(int index, string name, double value);
}
Now assume that the tree class is wrapped using cython. Then, in Python we can manipulate a PyTree object, add and remove branches and manipulate the properties of every branch. Consider the following python program:
tree=PyTree()
for i in range(TotalTime):
k=random.random()
if k>0.1:
tree.addBranch(random_index) #it is not important how we get the index
tree.addProperty(random_index,'prop1',1)
tree.addProperty(random_index,'prop2',1)
k=random.random()
if k>0.9:
tree.removeBranch(random_index)
for j in range(NumberOfBranches): #it's not important how we get the number of branches
operation1(j,'prop1') # assume this functions were defined
operation2(j,'prop2')
In this program I add and remove branches randomly. Each branch has two properties prop1 and prop2. There's an operation1 function performing an operation involving getProperty and setProperty functions on 'prop1', and an operation2 function doing the same on 'prop2'.
What I want is to have one processor(or thread) performing each operation. Since the program is continiously calling an external C++ library, should I use threading instead of multiprocessor?
How should I implement the parallelization? I tried to do it inspiring myself with this https://www.quantstart.com/articles/parallelising-python-with-threading-and-multiprocessing, but when I use both threading or multiprocessor I get a slower program...