What I did for a bandaid: disabled garbage collection, then ran manual collects after each generated pulse. My pulse lengths are normally of varied timing, but at regular intervals. In order to leave about 2 ms for GC, I no longer can do 100% duty cycle; however, the variation due to pyboard housekeeping is now way less.
[edited for clarity]