Google cloud functions using gcsfs - "RuntimeError: This class is not fork-safe"
Google cloud functions using gcsfs - "RuntimeError: This class is not fork-safe"
我已经在我的 Cloud Functions 中使用 gcsfs
一段时间了,现在没有任何问题。突然,它已停止为新部署的功能工作并抛出错误:
RuntimeError: This class is not fork-safe
(完整追溯附在照片中)
我猜这是由于 gcsfs
包的依赖项之一。无论如何,我已经将 gcsfs
更新到 requirements.txt
中的当前版本,但没有帮助。
可以通过如下定义云函数来重现错误 (Python 3.7):
main.py:
import gcsfs
# Read in runners and races for end_date
fs = gcsfs.GCSFileSystem(project='project-name-1234')
def try_gcsfs(request):
with fs.open(r'any_csv_file_in_cloud_bucket.csv', 'rb') as f:
lines = []
for line in f:
lines.append(line.decode(errors='ignore'))
print('success')
requirements.txt:
gcsfs==2021.10.0
此更改与 Python 3.7 buildpacks 推出有关。由于迁移到 gunicorn
及其工作模型,全局作用域和函数作用域可以在单独的进程中执行。这个问题可以通过将 GCSFileSystem
初始化移动到函数体中来解决。
您需要将 fs = gcsfs.GCSFileSystem(project='project-name-1234')
放在入口点 try_gcsfs
内。您的代码应如下所示:
import gcsfs
def try_gcsfs(request):
# Read in runners and races for end_date
fs = gcsfs.GCSFileSystem(project='project-name-1234')
with fs.open(r'any_csv_file_in_cloud_bucket.csv', 'rb') as f:
lines = []
for line in f:
lines.append(line.decode(errors='ignore'))
print('success')
更多信息可以参考这个link,Building Using the Pack CLI.
我已经在我的 Cloud Functions 中使用 gcsfs
一段时间了,现在没有任何问题。突然,它已停止为新部署的功能工作并抛出错误:
RuntimeError: This class is not fork-safe
(完整追溯附在照片中)
我猜这是由于 gcsfs
包的依赖项之一。无论如何,我已经将 gcsfs
更新到 requirements.txt
中的当前版本,但没有帮助。
可以通过如下定义云函数来重现错误 (Python 3.7):
main.py:
import gcsfs
# Read in runners and races for end_date
fs = gcsfs.GCSFileSystem(project='project-name-1234')
def try_gcsfs(request):
with fs.open(r'any_csv_file_in_cloud_bucket.csv', 'rb') as f:
lines = []
for line in f:
lines.append(line.decode(errors='ignore'))
print('success')
requirements.txt:
gcsfs==2021.10.0
此更改与 Python 3.7 buildpacks 推出有关。由于迁移到 gunicorn
及其工作模型,全局作用域和函数作用域可以在单独的进程中执行。这个问题可以通过将 GCSFileSystem
初始化移动到函数体中来解决。
您需要将 fs = gcsfs.GCSFileSystem(project='project-name-1234')
放在入口点 try_gcsfs
内。您的代码应如下所示:
import gcsfs
def try_gcsfs(request):
# Read in runners and races for end_date
fs = gcsfs.GCSFileSystem(project='project-name-1234')
with fs.open(r'any_csv_file_in_cloud_bucket.csv', 'rb') as f:
lines = []
for line in f:
lines.append(line.decode(errors='ignore'))
print('success')
更多信息可以参考这个link,Building Using the Pack CLI.