#Try "unbuffer"
YouYou can use the unbuffer command (which comes as part of the expect package), e.g.
unbuffer long_running_command | print_progress
unbuffer connects to long_running_command via a pseudoterminal (pty), which makes the system treat it as an interactive process, therefore not using the 4-kiB buffering in the pipeline that is the likely cause of the delay.
For longer pipelines, you may have to unbuffer each command (except the final one), e.g.
unbuffer x | unbuffer -p y | z