小编Yan*_*ler的帖子

在 Python 中写入流到 Google Cloud Storage

我正在尝试迁移AWS Lambda编写的函数PythonCF

  1. 即时解压缩并逐行阅读
  2. 在每一行上执行一些光变换
  3. 将未压缩的输出(一次一行或块)写入 GCS

输出 > 2GB - 但略小于 3GB 所以它适合Lambda只是.

好吧,这似乎是不可能的,或者更多地涉及GCP

  • 未压缩的无法放入内存或/tmp- 在撰写本文时限制为 2048MB - 所以 Python 客户端库upload_from_file(或_filename无法使用)
  • 这篇官方论文,但令我惊讶的是,它指的是boto一个最初为 设计的库AWS S3,并且已经过时boto3了一段时间。没有真正的GCP流式写入或读取方法
  • Node.js的有一个简单的createWriteStream()-好的文章在这里顺便说一句-但没有相应的一行代码在Python
  • 可恢复的媒体上传听起来很像,但很多代码在 Node 中处理要容易得多
  • AppEngine 有云存储,但在它之外不可用 - 并且已经过时
  • 在一个工作包装器上几乎没有例子,用于逐行写入文本/纯数据,就像GCS是本地文件系统一样。这不仅限于Cloud FunctionsPython Client 库所缺乏的功能,而且由于资源限制,它在 CF 中更为突出。顺便说一句,我参与了添加可写 IOBase 函数的讨论,但它没有吸引力。
  • 显然使用虚拟机或 …

python azure-storage google-cloud-storage aws-lambda google-cloud-functions

11
推荐指数
1
解决办法
3620
查看次数

由于身份验证,gsutil无法复制到s3

我需要将许多(1000+)个文件从GCS复制到s3以利用AWS lambda函数.我已经编辑~/.boto.cfg并注释掉了2个aws身份验证参数,但是GCEEC2 VM出现了简单的gsutil ls s3://mybucket故障.

错误是The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256..

我用的gsutil版本:4.28和位置GCSS3桶分别是US-CENTRAL1US East (Ohio)-的情况下,这是相关的.

我无能为力,因为AWS密钥有效,我启用了http/https.从GCS下载并使用我的笔记本电脑的Cyber​​duck上传到S3是不切实际的(> 230Gb)

amazon-s3 google-cloud-storage gsutil

9
推荐指数
1
解决办法
3803
查看次数

如何asyncio.gather成块的任务+使用具有TCP连接限制的信号量?

我有一个大型 (1M) 数据库结果集,我想为每一行调用 REST API。

API 可以接受批量请求,但我不确定如何对rows生成器进行切片,以便每个任务处理一个行列表,例如 10 行。我宁愿不预先读取所有行并坚持使用生成器。

在一个 http 请求中发送my_function一个列表是很容易的,但是呢asyncio.gather?也许其中之一itertools可以提供帮助。

请参阅下面的通用伪代码进行说明:

async def main(rows):
    async with aiohttp.ClientSession() as session:
        tasks = [my_function(row, session) for row in rows]
        return await asyncio.gather(*tasks)

rows = <generator of database rows>
results = asyncio.run(main(rows))
Run Code Online (Sandbox Code Playgroud)

注意:它们results很小,基本上是每行的确认值。

顺便说一句,

  • asyncio.gather()可以(有效)处理的任务数量是否有限制?
  • 当前gather()将所有请求/任务加载到内存中,消耗 50GB(!)。如何即时读取和传递行和任务以减少内存使用?这是asyncio.BoundedSemaphore()用来做什么的吗?
  • TCP 连接限制为 500,因为 REST Web 服务器可以接受这个数量。如果信号量发挥作用,该值应该是多少,即设置信号量> TCP连接限制是否有意义?

aiohttp很棒asyncio但很难理解 - 我同意这篇文章

asyncio 一直在变化,所以要警惕旧的 Stack Overflow …

python-asyncio aiohttp

3
推荐指数
1
解决办法
6347
查看次数

BigQuery加载-控制字符作为分隔符

我们有要加载的文件,其中字段值由“单位分隔符”分隔。0x1f
根据doc,如果不可打印,则应使用UTF-8进行编码。

使用bqCLI,我尝试将-F参数传递U+001F给毫无用处:BigQuery error in load operation: Field delimiter must be a single character, found:"U+001F"。带或不带引号的`\ x1f'
都不运气0x1F

我的编码是否错误bq,或者是API中的错误?

编辑
与资源管理器一起玩后,发现它是不喜欢定界符的API。除了可打印的分隔符,您还可以使用\t未记录的\b(退格键)和\f(表单字段)。
tab可以是自由格式文本字段中有效的用户输入字符,因此我们需要使用控制字符(从“ unit sep”转换后)

EDIT2:
请注意,\f作为分隔符不做工精细通过API直接而不是bqCLI( Field delimiter must be a single character, found:"\f")。

google-bigquery

1
推荐指数
1
解决办法
707
查看次数