Immediately after posting it occurred to me to add a small delay between scroll events:
def scroll_wheel_up(num_times):
for i in xrange(1, num_times):
time.sleep(.005)
multiplier = 1 - (float(i) / num_times)
speed = 4 * multiplier
event = CGEventCreateScrollWheelEvent(None, 0, 1, speed)
CGEventPost(kCGHIDEventTap, event)
This is a lot smoother and works to my satisfaction. If someone has another way to do this I'd love to hear it though!