-
Notifications
You must be signed in to change notification settings - Fork 322
Labels
api: bigqueryIssues related to the googleapis/python-bigquery API.Issues related to the googleapis/python-bigquery API.policybotpriority: p3Desirable enhancement or fix. May not be included in next release.Desirable enhancement or fix. May not be included in next release.type: bugError or flaw in code with unintended results or allowing sub-optimal usage patterns.Error or flaw in code with unintended results or allowing sub-optimal usage patterns.
Description
There is a race condition in the download thread and the main thread when using Bigquery Storage API to fetch data.
python-bigquery/google/cloud/bigquery/_pandas_helpers.py
Lines 797 to 801 in a76af35
| for page in rowstream.pages: | |
| if download_state.done: | |
| return | |
| item = page_to_item(page) | |
| worker_queue.put(item) |
python-bigquery/google/cloud/bigquery/_pandas_helpers.py
Lines 934 to 942 in a76af35
| finally: | |
| # No need for a lock because reading/replacing a variable is | |
| # defined to be an atomic operation in the Python language | |
| # definition (enforced by the global interpreter lock). | |
| download_state.done = True | |
| # Shutdown all background threads, now that they should know to | |
| # exit early. | |
| pool.shutdown(wait=True) |
When the download thread is blocked on worker_queue.put(item), if the main thread exit, causing the pool to shut down, the download thread will be stuck. This behavior prevents the program from exiting.
tswast and Linchin
Metadata
Metadata
Assignees
Labels
api: bigqueryIssues related to the googleapis/python-bigquery API.Issues related to the googleapis/python-bigquery API.policybotpriority: p3Desirable enhancement or fix. May not be included in next release.Desirable enhancement or fix. May not be included in next release.type: bugError or flaw in code with unintended results or allowing sub-optimal usage patterns.Error or flaw in code with unintended results or allowing sub-optimal usage patterns.