小编Dir*_*ich的帖子

toml 中的 mypy 覆盖被忽略?

以下是 mypy 文档中 toml 文件示例的简化版本:

[tool.mypy]
python_version = "3.7"
warn_return_any = true
warn_unused_configs = true

[[tool.mypy.overrides]]
module = ["somelibrary"]
ignore_missing_imports = true
Run Code Online (Sandbox Code Playgroud)

我在一个项目中使用此配置,其中我有一个第三方库(此处名为“somelibrary”),该库缺少类型提示,因此会在 mypy 报告中导致大量垃圾邮件。

全局 mypy 配置被选中,所以我知道整体设置很好,但是每当我将某个库覆盖中的ignore_missing_imports切换为 true 时,mypy 的行为仍然就像我将其保留为 false (我在全局 mypy 中使用了相同的选项)配置以确保事情按预期方式工作,情况就是如此)。

我正在使用(当前)最新的 mypy 版本 0.931。

难道我做错了什么?mypy 被窃听了吗?还有别的事吗?

python mypy

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

redis-py 退出时不关闭线程

我正在使用 redis-py 2.10.6 和 redis 4.0.11。

我的应用程序使用 redis 作为数据库和 pubsub。当我关闭时,我经常会遇到挂起或崩溃的情况。后者通常会抱怨处理 pubsub 回调时发生的错误文件描述符或文件上的 I/O 错误(我不使用任何错误),所以我猜测根本问题是相同的:不知何故我不'无法正确断开连接,并且我的 redis.Redis 对象使用的池处于活动状态。

前一种错误的输出示例(在 _read_from_socket 期间):

redis.exceptions.ConnectionError:从套接字读取时出错:(9,'错误文件描述符')

其他时候,堆栈跟踪清楚地显示 redis/connection.py -> redis/client.py -> threading.py,这证明 redis 没有杀死它使用的线程。

当我启动应用程序时,我运行:

self.redis = redis.Redis(host=XXXX, port=XXXX)
self.pubsub = self.redis.pubsub()
subscriptions = {'chan1': self.cb1, 'chan2': self.cb2}  # cb1 and cb2 are functions
self.pubsub.subscribe(**subscriptions)
self.pubsub_thread = self.pubsub.run_in_thread(sleep_time=1)
Run Code Online (Sandbox Code Playgroud)

当我想退出应用程序时,我在main中执行的最后一条指令是调用我的 redis using 类中的函数,其实现是:

self.pubsub.close()
self.pubsub_thread.stop()
self.redis.connection_pool.disconnect()
Run Code Online (Sandbox Code Playgroud)

我的理解是,理论上我什至不需要执行任何这些“关闭”调用,但是,无论有或没有它们,我仍然无法保证彻底关闭。

我的问题是,我该如何保证干净关闭?

redis python-3.x py-redis

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

部分模板规范的编译器错误(c ++)

我试图做一个简单的部分模板专业化,但我在g ++ 4.4.7,g ++ 4.8.5,clang ++ 3.8.0上遇到错误.每当我提到编译器错误时,我的意思是所有这些的输出,因为他们总是同意.我正在使用C++ 03,没有任何选项进行编译.

代码:

#include <iostream>

template <typename T, typename X, typename G>
struct A {};

template <typename T, typename X>
struct A<T, X, void> { A() : n(1) {} X n; T b; };

template <typename X>
struct A<X, void, void> { A() : n(2) {} X n; };

int main() {
  A<int, float> one;
  A<int> two;
  std::cout << one.n << " | " << two.n << "\n";
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题1:此代码无法编译.编译器说,A<int, …

c++ templates partial-specialization

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