Estimate Arrival Time of a Signal
A gradient-based method is essentially a high-pass filter, if you think about it. ("gradient" being "derivative" for 1D signals, and the derivative being small for non-changing signals, and very high for high-frequency signals). And that's exactly how I implement it:


Signal in
high-pass filter
abs()
find first above threshold 
subtract delay of filter¹


You can do so by designing a high-pass filter using scipy.signal.fir_filter_design and apply it using scipy.signal.filter.

Another popular method, which is mainly interesting if you want to do this on a live stream of samples, is doing the same within GNU Radio, where you can take the filter taps from the filter design, and put them into a readily available FIR filter. I kind of covered that in a blog post once, and you might want to read the first chapters of the GNU Radio Guided Tutorials, too.


¹: this requires your filter to have constant group delay, i.e. be linear-phase.