If you want more background on what it is doing, check out Google BigQuery Analytics chapter 7 (the relevant snippet is available here.)

TL;DR:

Your initial jobs.query() call is returning before the query completes; to wait for the job to be done you'll need to poll on jobs.getQueryResults(). You can then page through the results of that call.

Email codedump link for Python BigQuery API: how to get data asynchronously?