Если вы можете выразить задачу как один параллельный вызов функции, тогда вы должны быть в безопасности, потому что никакие другие запросы не могут проникнуть между ними (и не нужно трогать глобальные переменные движка), например:
from IPython import parallel
rc = parallel.Client()
view = rc[:]
@view.parallel(block=True)
def pfun(a):
"""each engine will get a chunk of a, not the whole thing"""
c = fun(a)
return c
# a will be scattered and c will be gathered
c = pfun(a)
Но если нет, то самое простое решение, вероятно, состоит в том, чтобы гарантировать отсутствие коллизий имен между заданиями, предоставляя переменным для данного запроса уникальный суффикс с UUID:
import uuid
suffix = str(uuid.uuid4()).replace('-','') # remove '-' so we have a valid identifier
a_name = "a_" + suffix
c_name = "c_" + suffix
mec.scatter(a_name, b)
mec.execute("%s = fun(%s)" % (c_name, a_name))
d = mec.gather(c_name)