Bench.jl has a bench_compare method which returns a DataFrame of times (I then divide the median of Python vs Julia columns), I'll add this output to the Bench script as it's useful to see (would be nice to add more stats, as it's just a DataFrame of all the solved puzzles in seconds). By default it runs a hundred random sudoku's on Julia, Python, and JuMP (the same on each)...
Thanks Steven: Making those const makes a huge difference, Julia wins (from 20% slower to 10% faster for me with just that change).
I will have a play and see how your other suggestions play out.
I was also very impressed with JuMP here... and it may be the latest is even faster (I'm using the version from the last release rather than master, and it has changed since then).