如何解决当使用工作类 gevent 运行 gunicorn 时,Python Bigquery to_dataframe 函数被阻止
当我在 gunicorn 上使用 worker-class=gevent 运行我的 Flask 应用程序时,服务器会阻塞。
-
gunicorn 命令 gunicorn 应用程序:app --workers=5 --worker-class=gevent --threads=5 --timeout=1800 --log-level=DEBUG
-
源代码
query = '...'
query_job = bigquery_client.query(query)\
query_job.to_dataframe()# to_dataframe function where block occurs
try:
frame = worker_queue.get(timeout=_PROGRESS_INTERVAL) # this point
yield frame
- Python 库版本
- python=3.7.10
- gunicorn=20.1.0
- gevnet=21.1.2
- eventlet=0.30.2
- google-cloud-bigquery=2.20.0
- google-cloud-bigquery-storage=2.4.0
- google-cloud-core=1.6.0
- pyarrow=4.0.0
当 worker-class 是 eventlet 时也会发生同样的情况。当worker-class为gthread或sync时不会发生。 _pandas_helpers.py中的block是按照下面的语法执行的,是不是线程相关的问题?
with concurrent.futures.ThreadPoolExecutor(max_workers=total_streams) as pool:
为什么会发生阻塞?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。