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.