Maintenance and readability are high priority, and you won't find any custom multiprocessing code in scikit-learn at the moment, but that does look like a substantial loss given that you report a decrease from 38 to 12s using custom implementation. @GaelVaroquaux or @ogrisel might have a take on this. Perhaps you could try reducing the `pre_dispatch`.

I'm not sure accepting an iterator provides much benefit: the input to `CountVectorizer` is likely more compact than the dicts your counting function returns, which `Parallel` will put into a list anyway.

(I've also observed some more overhead in the recent joblib upgrade, so it's possible some of that will be cut back again.)