remove empty
fix empty
add an iter_num()
add a DispatchProgress timer
cache print_progress