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()