Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 实现由GCS finalize触发的发布到pubsub的云功能_Python_Google Cloud Platform_Google Cloud Storage_Google Cloud Functions_Google Cloud Pubsub - Fatal编程技术网

Python 实现由GCS finalize触发的发布到pubsub的云功能

Python 实现由GCS finalize触发的发布到pubsub的云功能,python,google-cloud-platform,google-cloud-storage,google-cloud-functions,google-cloud-pubsub,Python,Google Cloud Platform,Google Cloud Storage,Google Cloud Functions,Google Cloud Pubsub,我一直在尝试用Python编写和部署一个云函数。(由于凌乱的文档和相对较快的更改速度,放弃了node.js) 这意味着将一条消息发布到发布/订阅主题,当一个文件完成上传到谷歌云存储桶(“finalize”)时触发 我用来部署函数的代码是 gcloud functions deploy hello_gcs_generic --runtime python37 --trigger-resource bucketcfpubsub 我一直在尝试使用 我在谷歌云控制台中收到这些错误 ERROR: (gc

我一直在尝试用Python编写和部署一个云函数。(由于凌乱的文档和相对较快的更改速度,放弃了node.js)

这意味着将一条消息发布到发布/订阅主题,当一个文件完成上传到谷歌云存储桶(“finalize”)时触发

我用来部署函数的代码是

gcloud functions deploy hello_gcs_generic --runtime python37 --trigger-resource bucketcfpubsub
我一直在尝试使用

我在谷歌云控制台中收到这些错误

ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Function load error: Code in file main.py can't be loaded.
Detailed stack trace: Traceback (most recent call last):
  File "/env/local/lib/python3.7/site-packages/google/cloud/functions_v1beta2/worker.py", line 256, in check_or_load_user_function
    _function_handler.load_user_function()
  File "/env/local/lib/python3.7/site-packages/google/cloud/functions_v1beta2/worker.py", line 166, in load_user_function
    spec.loader.exec_module(main)
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/user_code/main.py", line 3, in <module>
    from google.cloud import pubsub_v1
ImportError: cannot import name 'pubsub_v1' from 'google.cloud' (unknown location)
并更新了bigquery、存储和日志等其他云功能。然后我得到了这些错误:

ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Function load error: Code in file main.py can't be loaded.
Detailed stack trace: Traceback (most recent call last):
  File "/env/local/lib/python3.7/site-packages/google/cloud/functions_v1beta2/worker.py", line 256, in check_or_load_user_function
    _function_handler.load_user_function()
  File "/env/local/lib/python3.7/site-packages/google/cloud/functions_v1beta2/worker.py", line 166, in load_user_function
    spec.loader.exec_module(main)
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/user_code/main.py", line 3, in <module>
from google.cloud import pubsub_v1`

您需要将
googlecloud pubsub
添加到
requirements.txt
文件中,而不是添加到
main.py
文件中。应该是这样的:

google-cloud-error-reporting==0.30.0
google-cloud-pubsub==0.38.0
有一种方法可以满足您的需要。;-)

你引用的例子更高级。它显示了如何发布带有错误处理的消息。高级示例中的
while(True):sleep(60)
行用于保持主线程处于活动状态,除非发出
Ctrl+C
或其等效命令以停止程序运行。这个
sleep
函数之所以存在,是因为我们可以等待publish futures上的回调调用完成,而不是在publish调用后立即退出程序。同样,对于您正在尝试学习如何使用云功能的云发布/订阅来说,这可能有点太复杂了。我建议不要使用高级示例,而使用快速入门示例

从google.cloud导入pubsub_v1
#TODO project\u id=“您的谷歌云项目id”
#TODO topic_name=“您的发布/子主题名称”
publisher=pubsub_v1.publisher客户端()
#“topic_path”方法创建完全限定的标识符
#格式为`项目/{project_id}/topics/{topic_name}`
主题路径=发布者。主题路径(项目id,主题名称)
对于范围(1,10)内的n:
数据=u'消息编号{}'。格式(n)
#数据必须是bytestring
data=data.encode('utf-8')
#发布消息时,客户端将返回未来消息。
future=publisher.publish(主题路径,数据=data)
print('Published{}of message ID{}.'.format(数据,future.result()))
打印('已发布消息')

节点文档有什么乱七八糟的地方?API的哪些变化是有问题的?作为一个完全的初学者,我得到了一些教程和代码片段,这些教程和代码片段的范围似乎是从0.xx到8.xx,其中很少有标签。遇到一些语法和对象,这些语法和对象似乎在某个地方破坏了兼容性,并感到困惑。IIRC有一个关于from.events和buffers的,但我没有记录这些问题,所以无法解释更多,对不起。我在云函数、桌面、服务器等中使用了Pub/Sub。遗漏了一些东西,掩盖了您真正的问题。1) 不要为Google云客户端库指定版本号。除非您有技术原因,否则请使用最新版本。2) 编辑您的问题并包含所有代码。3) 包括您的requirements.txt。4) Python源代码格式对于理解代码至关重要。通过使用正确的缩进正确格式化Python源代码来更新您的问题。5) 在云函数部署中包含文件的布局。请尝试使用前面的sudo运行代码。很抱歉,我似乎无法让@Function正常工作。有关更新,请参见OP的底部。@LarryCai您的函数可能由于
而超时,而True:time.sleep(60)
,您为什么需要它?@LarryCai我知道这是从示例中得到的,您可以尝试同步等待每个未来的
result()
调用,而不是休眠。
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Function load error: Code in file main.py can't be loaded.
Detailed stack trace: Traceback (most recent call last):
  File "/env/local/lib/python3.7/site-packages/google/cloud/functions_v1beta2/worker.py", line 256, in check_or_load_user_function
    _function_handler.load_user_function()
  File "/env/local/lib/python3.7/site-packages/google/cloud/functions_v1beta2/worker.py", line 166, in load_user_function
    spec.loader.exec_module(main)
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/user_code/main.py", line 3, in <module>
from google.cloud import pubsub_v1`
Deploying function (may take a while - up to 2 minutes)...failed.
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Function load error: Code in file main.py can't be loaded.
Detailed stack trace: Traceback (most recent call last):
  File "/env/local/lib/python3.7/site-packages/google/cloud/functions_v1beta2/worker.py", line 256, in check_or_load_user_function
    _function_handler.load_user_function()
  File "/env/local/lib/python3.7/site-packages/google/cloud/functions_v1beta2/worker.py", line 166, in load_user_function
    spec.loader.exec_module(main)
  File "<frozen importlib._bootstrap_external>", line 724, in exec_module
  File "<frozen importlib._bootstrap_external>", line 860, in get_code
  File "<frozen importlib._bootstrap_external>", line 791, in source_to_code
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/user_code/main.py", line 3
ERROR: (gcloud.functions.deploy) OperationError: code=3, messa
ge=Function load error: Error: function load attempt timed out
.
google-cloud-error-reporting==0.30.0
google-cloud-pubsub==0.38.0