小编Dev*_*evy的帖子

如何在TRUNCATE TABLE上解决MySQL innodb"等待表元数据锁"?

在GitLab CI服务器中运行包含数百个应用程序单元测试的测试套件.在运行了10次测试之后,不知怎的,它总是停留在等待TRUNCATE TABLE上的表元数据锁定,这是一个tearDown步骤.

我知道这个SHOW ENGINE INNODB STATUS命令.以下是一些诊断日志:

mysql> \s
--------------
mysql  Ver 14.14 Distrib 5.6.30, for Linux (x86_64) using  EditLine wrapper

Connection id:      190
Current database:   
Current user:       root@localhost
SSL:            Not in use
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server version:     5.6.30 MySQL Community Server (GPL)
Protocol version:   10
Connection:     Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:        /var/run/mysqld/mysqld.sock
Uptime:         51 min 28 sec

Threads: …
Run Code Online (Sandbox Code Playgroud)

mysql

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

RabbitMQ Exchange类型比较:主题与标题

我们正在重建我们的消息队列系统.在浏览RabbitMQ交换类型时,我注意到有两种可能的解决方案来实现路由消息的多播特性.

  1. 主题交流.通过设置主题交换和具有特定模式的路由密钥,消息将被路由到指定的队列.IE产品.*.根据AMQP规范,这通常是实现Pub/Sub模式的交换类型.

  2. 标题交换.所谓的"类固醇直接交换".对于多播消息更加灵活,因为路由密钥被忽略,而每条消息都有"x-match"标头来表示消息应该传递给哪些队列.每条消息都可以以不同方式动态路由.但是,这种交换类型似乎与Message Queue设计更紧密地结合在一起,因为消费者/生产者必须更多地了解目标队列.

所以问题是,有没有人有这两种交换类型的经验,并分享上述两种类型的优点/缺点的更多特征?谢谢!

参考文献[1]:https://www.rabbitmq.com/tutorials/amqp-concepts.html

message-queue rabbitmq

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

如何用avprobe/ffprobe检测音频采样率?

我正在使用通过Homebrew安装的libav 9.6.

$ avprobe -version
avprobe version 9.6, Copyright (c) 2007-2013 the Libav developers
  built on Jun  8 2013 02:44:19 with Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
avprobe 9.6
libavutil     52.  3. 0 / 52.  3. 0
libavcodec    54. 35. 0 / 54. 35. 0
libavformat   54. 20. 3 / 54. 20. 3
libavdevice   53.  2. 0 / 53.  2. 0
libavfilter    3.  3. 0 /  3.  3. 0
libavresample  1.  0. 1 /  1.  0. 1 …
Run Code Online (Sandbox Code Playgroud)

ffmpeg libav ffprobe avprobe

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

如何加速 SQLAlchemy.create_all() 进行单元测试

我一直在努力加快运行所有单元测试的时间。事实证明,大部分时间都消耗在每个测试用例方法中的SQLAlchemy.create_all()setUp()上。

我可以想到一些想法来减少数据库设置的时间(使用原始 SQL 等)。在深入研究该方法之前,是否有更好的方法来加快速度?

performance sqlalchemy flask-sqlalchemy

8
推荐指数
0
解决办法
792
查看次数

是否可以在没有root权限的情况下安装aws-cli包?

正如标题所示,我没有找到一个好的方法来安装aws-cli(https://github.com/aws/aws-cli/)而没有root访问权限(或相当于sudo权限).

如果Homebrew设置了一些目录和权限以便设置将来的安装,Mac上的设置方式可能会暗示它.但是,我还没有在Linux中找到任何方法(特别是Red Hat Enterprise Linux或CentOS发行版).

我也知道SCL从RHEL的(https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Developer_Guide/scl-utils.html)当然,同样需要sudo.

redhat centos amazon-web-services aws-cli

6
推荐指数
2
解决办法
6803
查看次数

如何在postgresql中准确获取数据库大小?

我们正在 PostgreSQL 版本 9.1 上运行,之前我们在一张表中有超过 10 亿行,并且已被删除。然而,看起来该\l+命令仍然不准确地报告实际数据库大小(它报告了 568GB,但实际上远小于)。

证明 568GB 错误的证据是,单个表大小统计并没有达到这个数字,如您所见,前 20 个关系的大小为 4292MB,其余 985 个关系的大小都远低于 10MB。事实上,所有这些加起来大约不到 6GB。

知道为什么 PostgreSQL 如此膨胀吗?如果确认的话,我该如何消肿?我不太熟悉VACUUM,这是我需要做的吗?如果是这样,怎么办?

非常感谢。

pmlex=# \l+
                                                                       List of databases
      Name       |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   |  Size   | Tablespace |                Description                 
-----------------+----------+----------+-------------+-------------+-----------------------+---------+------------+--------------------------------------------
 pmlex           | pmlex    | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 568 GB  | pg_default | 
 pmlex_analytics | pmlex    | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 433 MB  | …
Run Code Online (Sandbox Code Playgroud)

postgresql database-administration

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

是否可以使用contextlib.closing()来调用任意清理方法而不是.close()

我在python中使用with statement(PEP 343)遇到一些问题,在上下文后自动管理资源清理.特别是,with statement始终假定资源清理方法是.close().以下代码块中的IE在browser.close()执行用完上下文时自动被调用,但是,browser.close()由于它只关闭当前窗口而不关闭整个浏览器,因此不能正常清理.应该做的就是打电话browser.quit().

with contextlib.closing(webdriver.Firefox()) as browser:
    # do something with browser
# at this point browser.close() has been called.
Run Code Online (Sandbox Code Playgroud)

遗憾的是,contextlib.closing并没有提供一种方式来定制清理方法名被调用,因为显然看到这里:

 def __exit__(self, *exc_info):
      self.thing.close()
Run Code Online (Sandbox Code Playgroud)

但是,我确实注意到有一个参数,exec_info但没有在该特定方法中使用.谁知道为什么?

更大的问题是,如标题所示,如果可能的话,如何使用self.thing来调用任意清理方法?如果没有,最好的解决方法是什么?我应该回去使用try...finally吗?

python with-statement

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

Flask管理员自定义表单验证多个字段?

我一直打算创建一个基于多个字段值的自定义表单验证逻辑(在我的情况下,为确保确保日期范围数据的完整性,有2个字段,即IE start_time <end_time)。但是,翻阅Flask管理站点上的文档,我找不到任何地方可以做这种事情。我知道您可以轻松地将验证函数列表传递给类的子类中属性的validators参数,但是同样,按字段验证也不完全是我想要的。form_argsBaseModelView

所以我的问题是:如何一次验证多个字段?

另外,我看不到任何预保存的钩子事件函数可以执行此操作。我知道,on_model_change但是那是一个保存后的钩子,它会破坏将验证放在其中的验证目的。进行预保存动作的合适方式是什么?

python sqlalchemy flask flask-wtforms flask-admin

5
推荐指数
2
解决办法
3306
查看次数

Nginx WebSocket 代理不断获得 HTTP 301 重定向

在过去的几天里,我一直试图让 Nginx WebSocket 代理工作,但在我的一生中,我无法让它工作。我按照官方指南here,一直使用 Python 的websockets模块作为服务器,使用 npm 包wscat作为客户端。wscat与 Python WebSocket 后端的直接连接工作正常(来自浏览器的连接也是如此)。但是一旦我在 Nginx 中分层,它就无法正常工作并继续给我一个标准的 HTTP 301 重定向。

使用 Nginx 代理的 cURL 调试输出:

$ curl 'http://test.ws:8080/websocket' \
> -H 'Pragma: no-cache' \
> -H 'Origin: http://localhost:8080' \
> -H 'Accept-Encoding: gzip, deflate, sdch' \
> -H 'Sec-WebSocket-Version: 13' \
> -H 'Sec-WebSocket-Key: V15bszpaQ+8Vq7mWR6NQbQ==' \
> -H 'User-Agent: Mozilla/5.0' \
> -H 'Upgrade: websocket' \
> -H 'Cache-Control: no-cache' \
> -H 'Connection: Upgrade' \ …
Run Code Online (Sandbox Code Playgroud)

python proxy curl nginx websocket

4
推荐指数
2
解决办法
8164
查看次数

SQLAlchemy ORM事件挂钩属性保持不变

我正在努力在SQLAlchemy事件中找到一种方法,在属性更新并持久保存到数据库中时调用外部API.这是我的背景:

User具有名为的属性的模型birthday.当User模型实例得到更新和保存时,我想调用外部API来相应地更新该用户的生日.

我已经尝试了属性事件,但是,它会生成太多命中,并且无法保证set/ removeattribute事件最终会被持久化(自动提交设置为False,并且在发生错误时事务会回滚.)

会话事件无法工作,因为它需要一个Session/SessionFactory作为参数,并且代码中只有很多地方可以使用会话.

我一直在官方文档中查看所有可能的SQLAlchemy ORM事件挂钩,但我找不到其中任何一个满足我的要求.

我想知道是否有其他人对如何在SQLAlchemy中实现这种组合事件触发器有任何了解.谢谢.

python orm events sqlalchemy

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

批量删除Bash中文件名中的前导破折号

$ ls -l
-rw-r--r--@ 1 ywang  Users  6156 Aug 16 14:38 -STEST.20140728.151116.pgp
-rw-r--r--@ 1 ywang  Users  2756 Aug 16 14:38 -STEST.20140728.152042.pgp
-rw-r--r--@ 1 ywang  Users  3424 Aug 16 14:38 -STEST.20140729.141735.pgp
-rw-r--r--@ 1 ywang  Users  2439 Aug 16 14:38 -STEST.20140729.142515.pgp
-rw-r--r--@ 1 ywang  Users  2672 Aug 16 14:38 -STEST.20140730.125115.pgp
-rw-r--r--@ 1 ywang  Users  2391 Aug 16 14:38 -STEST.20140730.125556.pgp
Run Code Online (Sandbox Code Playgroud)

嗨,我尝试了多种方法,例如循环浏览文件并mv逐个进行.但是,我没有成功,因为需要注意的是mv将前导破折号解释为自身的参数,并且当与通配符组合时,反斜杠转义似乎不起作用*.

有什么想法可以在Bash的oneliner中完成吗?谢谢!

bash batch-rename

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