The problem is not with the code / Python 3.6, it is with Spyder.
After some investigation I found that the code runs fine when executed in an external system terminal but not when run in Spyder’s IPython console.
I was able to dump the contents of spec and assign them to a variable that was included inside main to allow this code to function within the IPython console.
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
__spec__ = "ModuleSpec(name="builtins", loader=<class '_frozen_importlib.BuiltinImporter'>)"
with Pool(5) as p:
print (p.map(f, [1, 2, 3]))