Parallel multiple tasks in class-based program

Hi, consider

from dolfin import *
import multiprocessing


def poisson_solver(i):
    mesh = UnitSquareMesh(MPI.comm_self, 30, 30)
    V = FunctionSpace(mesh, "Lagrange", 1)

    u_D = Expression('1 + x[0] * x[0] + 2 * x[1] * x[1]', degree=2)
    bc = DirichletBC(V, u_D, 'on_boundary')

    u, v = TrialFunction(V), TestFunction(V)
    a = dot(grad(u), grad(v)) * dx
    f = Constant(-i)
    L = f * v * dx

    u = Function(V)
    solve(a == L, u, bc)
    File(mesh.mpi_comm(), 'foo%g.xml' % i) << u

# ----------------------------------------------------------------------

if __name__ == "__main__":
    poisson_solver(0)  # JIT compile everything first

    pool = multiprocessing.Pool(processes=4)
    pool.map(poisson_solver, range(10))
    pool.close()
3 Likes