Should you put it in a background process?
Absolutely. Start a background thread and create a child context from your main context to do all the work in.
What else can be done
Every unsaved change you make to a managed object context is stored in memory. Making thousands of changes before saving is inadvisable as it will take a lot of memory but also the save take will take a long time.
You could batch the updates into say 100 changes at a time and save each block of 100.
Alternatives
If you are always loading in these items for the app then you could also preload them into a DB and bundle it into the app itself.
That way you don't need to save them at run time as they are already in there.