Вы можете воссоздать модуль globals локально, избегая изменения его глобального состояния, например ::
def call_foo():
import foo
foo_globals = foo.__dict__.copy() # shallow copy, be careful!
foo_globals["a"] += 1
print(foo_globals["a"])
В противном случае вам придется выгружать модуль каждый раз перед его загрузкой (и это может иметь много нежелательных последствий, поэтому очень не рекомендуется ), например ::
import sys
def call_foo():
sys.modules.pop("foo", None)
import foo
foo.a += 1
print(foo.a)