Keras Sequence Generator leads to huge memory usage when used with fit_generator
Q1: Yes, in theory memory should be released
Q2: This is not a question
Q3: Yes, fit_generator can work perfectly fine on a CPU.

Your data generator looks fine as far as I can see, based on my own experiences with implementing them, so I can only advise on how to proceed to find the root-cause for now as a potential remedy for the actual problem.

The first thing I would try is to set multi-processing to False and workers to 1. I have had some issues myself a while back when using the multi-processing functionality, and while I do not remember if it was memory related or race-condition related, I would start by checking if things work fine.
The second thing I would look at is alternative ways of loading the files and see if these things still lead to memory leaks.