小编Ago*_*iro的帖子

SimpleCookie 泛型类型

SimpleCookie显然是通用类型,因此以下代码(test.py)在检查时会出错mypy

from http.cookies import SimpleCookie

cookie = SimpleCookie()
Run Code Online (Sandbox Code Playgroud)

test.py:3: 错误:“cookie”需要类型注释

现在,如果我将 test.py 第 3 行更改为:

cookie: SimpleCookie = SimpleCookie()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

test.py:3: 错误:缺少泛型类型“SimpleCookie”的类型参数

SimpleCookie继承自dict, 有str键和Morsel值,所以我假设正确的泛型类型注释是这样的:

from http.cookies import Morsel, SimpleCookie

cookie: SimpleCookie[str, Morsel] = SimpleCookie()
Run Code Online (Sandbox Code Playgroud)

但现在错误是:

test.py:3: 错误:“SimpleCookie”需要 1 个类型参数,但给出 2 个

将第 3 行更改为

cookie: SimpleCookie[str] = SimpleCookie()
Run Code Online (Sandbox Code Playgroud)

突然mypy很高兴,但让我很困惑为什么这是正确的解决方案,所以我有两个问题:

  1. 为什么SimpleCookie泛型类型只有一个参数?
  2. 在我的代码中处理这个问题的最佳方法是什么?我应该SimpleCookieSimpleCookie[str](这对我来说似乎是个谎言)来注释变量,还是应该只用注释来注释它们Any并希望这会在未来的 Python 版本中得到清理?

mypy 版本 0.750 和 Python 3.8.0

python mypy python-3.8

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

Chrome应用中的AJAX请求有哪些限制?

我正在计划一个Chrome App项目,我将在其中执行大量的AJAX调用.在确定Chrome应用程序作为首选平台之前,我希望能够更好地了解与Web应用程序相比的AJAX调用的局限性和优势.进行了一些研究后,我想出了以下答案.由于我在这方面的经验有限,我想知道我的发现是否正确,是否还有其他限制应该考虑.

1.起源

Chrome应用程序的起源限制比Web应用程序更灵活:通过请求跨域权限,可以在应用程序清单中放宽与AJAX请求相关的同源策略.因此,不需要诸如跨源资源共享(CORS)和JSONP(事实上内容安全策略(CSP)禁止)的技术.

2.内容

有关可访问内容的限制更严重:Chrome应用程序只能引用应用程序中的脚本,样式表,图像,框架,插件和字体,但可以从任何外部资源加载媒体资源(视频,音频和相关文本轨道).在"连接-SRC"指令设置为允许加载任何的URI,所以给出的跨域权限或使用CORS,一个可以让AJAX调用的所有主机和接收文本和媒体类型响应.其他内容类型可以作为blob提供.CSP不能放松.

(我发现一个特点:如上所述,CSP禁止加载多种内容类型,因此必须通过AJAX请求将它们作为blob加载.由于同源策略,这必须通过CORS完成.大多数服务器都不要没有启用CORS,即使它们的内容是公开的.因此,如果Chrome Apps始终强制执行"Access-Control-Allow-Origin"(ACAO)响应标头,那么CORS方法在很多情况下都会失败.这个问题是跨域权限:如果给予访问服务器的权限,即使没有收到适当的ACAO头,也会通过请求.但是也可以单独依赖CORS:如果没有跨域权限授予,但请求是通过通配符ACAO设置服务器,它也是通过.)

还有两点需要注意:

  • Chrome应用的某些文档是指扩展而非应用.在这些情况下,我认为那里提供的信息也适用于应用程序.
  • 同步XHR请求被禁用.

javascript ajax google-chrome-app

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

是否可以在后台启动异步事件循环而不生成线程或进程?

我有一个用 Python 3.5 实现的服务,它应该定期通过网络加载文件。我想避免在加载时阻塞主线程。为了避免向我的应用程序引入线程和共享内存的复杂性,我想使用带有 asyncio 包的事件循环来对此进行检测。

为了运行事件循环,我找到了AbstractEventLoop.run_forever()AbstractEventLoop.run_until_complete(future)方法,但两者在调用时似乎都会阻塞主线程。我发现避免这种情况的唯一方法是在不同的线程中启动循环。但是如果我无论如何都使用线程,那么使用事件循环就没有意义了。

所以我的问题是:是否可以在后台启动异步事件循环而不生成线程或进程?

python-3.x python-asyncio

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

如何检查boto3 S3.Client.upload_fileobj是否成功?

我想在S3上保存长时间运行的结果。这项工作是在Python中实现的,因此我正在使用boto3。该用户指南说,使用S3.Client.upload_fileobj用于此目的,其工作正常,但我无法弄清楚如何检查是否上传成功。根据文档,该方法不返回任何内容,也不会引发错误。该Callback参数似乎旨在用于进度跟踪,而不是错误检查。还不清楚方法调用是同步还是异步。

如果由于某种原因上传失败,我想将内容保存到磁盘并记录错误。所以我的问题是:如何检查boto3 S3.Client.upload_fileobj调用是否成功,如果失败,则要进行一些错误处理?

python-3.x boto3

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

如何使用 PyTorch 的 DataLoader 确保批次包含来自所有工作人员的样本?

我想知道如何torch.utils.data.DataLoader在 PyTorch 中使用,尤其是在多工人情况下。

我发现一个批次的输出DataLoader总是来自一个工人。我预计 DataLoader 中有一个队列,用于存储来自所有工作人员的数据,而 DataLoader 将它们在队列中打乱以输出随机批处理数据。我认为这是tf.data.DatasetTensorflow 中的方法。我们可以在 PyTorch 中实现类似的功能吗?我想Tfrecord通过使用多个工作人员从大序列化文件(如)加载数据集。在这种情况下,在一批中混合源文件,这意味着混合工作器的源,很重要。

请参考以下代码:

import random
import time

import torch


class MyDataset(torch.utils.data.Dataset):
    def __len__(self):
        return 50

    def __getitem__(self, idx):
        info = torch.utils.data.get_worker_info()

        time.sleep(random.uniform(0, 1))
        print("[{}]:{}".format(info.id, idx))
        return idx, info.id


if __name__ == '__main__':
    dataset = MyDataset()
    dataloader = torch.utils.data.DataLoader(dataset, batch_size=5, shuffle=False, num_workers=2)
    for batch in dataloader:
        print(batch)
Run Code Online (Sandbox Code Playgroud)

输出:

[0]:0
[1]:5
[0]:1
[1]:6
[0]:2
[0]:3
[1]:7
[0]:4
[tensor([0, 1, 2, 3, 4]), tensor([0, 0, 0, …
Run Code Online (Sandbox Code Playgroud)

pytorch dataloader

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

为什么 TypedDict 与匹配的 Mapping 不兼容?

考虑以下代码:

from typing import Any, Mapping, TypedDict


class MyDict(TypedDict):
    foo: bool


def my_func_any(a: Mapping[str, Any]) -> None:
    print(a)


def my_func_bool(a: Mapping[str, bool]) -> None:
    print(a)


d: MyDict = {
    'foo': True
}

my_func_any(d)
my_func_bool(d)  # line 21
Run Code Online (Sandbox Code Playgroud)

使用 检查时会出现以下错误mypy==0.761

test.py:21: 错误:“my_func_bool”的参数 1 具有不兼容的类型“MyDict”;预期“映射[str,bool]”

我期望my_func_any(d)my_func_bool(d)都可以,但后者是一个错误。这是一个错误还是我错过了什么?

python python-3.x mypy

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

如何通过服务帐户使用 Terraform `google_app_engine_domain_mapping`?

我正在尝试使用以下配置通过 Terraform 创建 GCP App Engine 域映射:

provider "google" {
  version = "3.36.0"
  region  = var.region
}

resource "google_app_engine_domain_mapping" "domain_mapping" {
  project = local.project_id
  domain_name = var.domain_name

  ssl_settings {
    ssl_management_type = "AUTOMATIC"
  }

  depends_on = [
    google_app_engine_application.backend_app
  ]
}
Run Code Online (Sandbox Code Playgroud)

Terraform 配置为使用具有以下 IAM 权限(无条件)的 GCP 提供程序的组织级服务帐户:

  • 结算帐号用户
  • 项目创建者
  • 服务配置编辑器(我添加了这个,认为它可以解决基于这个这个文档页面的问题。)

作为组织所有者的 Google 帐户已验证相关域,但我收到以下错误:

错误:创建域映射时出错:googleapi:错误 403:调用者无权管理域“testing.redacted.com”。如果您拥有“testing.redacted.com”,则可以通过网站站长中心门户验证域或其任何父域的所有权来获得授权:https : //www.google.com/webmasters/verification/verification ?domain=testing.redacted.com。我们建议验证您希望与子域一起使用的最大范围的所有权(例如,如果您希望映射“subdomain.example.com”,请验证“example.com”)。

我还尝试将服务帐户的电子邮件作为 Google Search Console 中的用户添加到域中,但无济于事。

google-app-engine google-cloud-platform terraform terraform-provider-gcp

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

此样本中的矢量是否复制了两次?

C++书籍中的数据结构和算法分析包含图1.26中第63页的以下代码片段,用于矩阵类(某些部分被省略或截断):

#include <vector>
using namespace std;

template <typename Object>
class matrix
{
  public:
    matrix(int rows, int cols);

    matrix(vector<vector<Object>> v) : array{v} { }        
    matrix(vector<vector<Object>>&& v) : array{std::move(v)} { }

    const vector<Object>& operator[](int row) const;
    vector<Object>& operator[](int row);
  private:
    vector<vector<Object>> array;
};
Run Code Online (Sandbox Code Playgroud)

matrix(vector<vector<Object>> v)构造函数中v被复制两次?签名应该matrix(const vector<vector<Object>>& v)改为吗?

勘误表中没有提到这个问题:https://users.cs.fiu.edu/~weiss/dsaa_c++4/errata.html

书籍引用:

Weiss,MA:C++中的数据结构和算法分析,国际版,2014,Pearson Education Limited.

c++ c++11

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

`WKNavigationDelegate` `didFail` 和 `didFailProvisionalNavigation` 有什么区别

iOS WKWebViewWKNavigationDelegate有两种方法来处理失败的导航:

文档仅告诉我们,一种类型在导航过程中比另一种类型发生得更早。错误参数是通用的,因此没有帮助。didFailProvisionalNavigation据我所知,Brave 和 Firefox iOS 只能处理它们的源代码。

我的问题是:

  1. 两种类型的错误到底有什么区别?
  2. 是否有每个可能发生的错误的列表?
  3. 什么时候需要处理didFail浏览器似乎无法处理的情况?

ios swift wkwebview

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