小编Ann*_*wan的帖子

SQLAlchemy 'bulk_save_objects' 与 'add_all' 底层逻辑差异?

考虑以下三种使用sqlalchemy ORM插入对象的方法:

(1)

for obj in objects:
    session.add(obj)
Run Code Online (Sandbox Code Playgroud)

(2)

session.add_all(objects)
Run Code Online (Sandbox Code Playgroud)

(3)

session.bulk_save_objects(objects)
Run Code Online (Sandbox Code Playgroud)

假设长度objects[]50000

  • 方法 (1) 是否形成并发送50000插入 SQL 查询?
  • 方法 (2) 是否仅形成和发送1SQL 查询?
  • 方法 (3) 是否仅形成和发送1SQL 查询?

我知道这三种方法在速度上差别很大。但是底层实现细节有什么区别?

python sqlalchemy

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

无法使用opencv打开视频

做其他事情时,opencv工作正常.它可以打开图像并显示图像.但它无法打开视频.

我用来打开视频的代码如下

import cv2

cap = cv2.VideoCapture("MOV_0006.mp4")

while True:
    ret, frame = cap.read()

    cv2.imshow('video', frame)
    if cv2.waitKey(1) & 0xff == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

但是在执行时,它会输出如下所示的错误消息

[h264 @ 0x1053ba0] AVC: nal size 554779904
[h264 @ 0x1053ba0] AVC: nal size 554779904
[h264 @ 0x1053ba0] no frame!
Run Code Online (Sandbox Code Playgroud)

vlcmplayer可播放该视频,但OpenCV的不能.

我已经安装了x264libx264-142编解码器包.(使用sudo apt-get install)

我的ubuntu版本是14.04 trusty.

我不确定它是否是编解码器问题?

我用WITH_UNICAP=ON或用了重建opencv WITH_UNICAP=OFF,但它根本不会影响问题.错误消息永远不会改变.

python video opencv codec

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

在 shell 命令之后通过管道传输 vim 命令

我正在尝试在 vim 中进行键映射,(a) 保存当前文件 (b) 执行 git 操作,使用 shell (c) 退出当前的 vim 编辑器。

我已经尝试过以下方法,但仍然无法弄清楚。

方法 1 - 在 Vim 命令行中

:w | !git commit -am "auto" | q

方法 2 - 在 .vimrc 中

map :W :w \| !git commit -am "auto"

map :L :Wq

问题

问题是管道|只能用于附加 shell 命令。我该怎么做'a Vim command' + 'a shell command' + 'a Vim command'?如何在 shell 命令之后通过管道传输 vim 命令?

vim bash shell

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

如何在不传递记录器变量的情况下使用不同的记录器?(Python 日志记录)

我有多个模块使用相同的utils.py包。如何使记录器utils.py不同而不必从调用者(即 ClassA 或 ClassB)传递记录器变量?

非常简单的示例代码如下。实际上,我在 中有很多函数和类utils.py,这就是为什么我不想将logger变量传递到utils.py.

~/test-two-loggers$ tree .

??? main.py
??? configs.py
??? ClassA.py
??? ClassB.py
??? utils.py

0 directories, 5 files
Run Code Online (Sandbox Code Playgroud)

主文件

import ClassA
import ClassB

ClassA.func()
ClassB.func()
Run Code Online (Sandbox Code Playgroud)

类A.py

import utils
import configs
import logging

def func():
    logger = logging.getLogger("classA")
    logger.info("in ClassA")
    utils.common_func(logger)  # I want to change this line!!!!
Run Code Online (Sandbox Code Playgroud)

类B.py

import utils
import configs
import logging

def func():
    logger = logging.getLogger("classB")
    logger.info("in ClassB")
    utils.common_func(logger)  # I want …
Run Code Online (Sandbox Code Playgroud)

python logging

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

Celery-工人关闭后如何更新任务状态?

设定

芹菜3.0

经纪人= RabbitMQ

情境

任务已经被确认并开始处理,并且具有state=STARTED。然后,我想重新启动工作程序(以将工作程序更新为较新的版本)。重新启动worker(使用supervisorctl restart)后,那些长时间运行的任务将全部终止。但是他们的状态仍然在state=STARTED。如何将其状态更新为FAILURE其他值?(而且,我不希望在工作程序重新启动后再次执行这些任务。)

尝试过的方法(但不起作用)

  • 使用track_started=True---如果使用此选项,则state=STARTED在工作线程重新启动后,任务将保留在此处。如果没有此选项,则state=PENDING在工作程序重新启动后,任务将保留。
  • 使用CELERY_ACKS_LATE=True--- state=STARTED工作重新启动后,任务将保留在。并且再次执行任务,而不是期望的行为。
  • 使用signal(SIGTERM, handler)和处理程序函数来捕获信号。可以成功输入处理程序。但是,无论我将什么内容放入处理程序中,都无法更改任务的状态。状态保持不变,不会更改为FAILURE。在我尝试过的处理程序中
    • raise Exception
    • exit(0)
    • exit(1)

Celery是否有任何设置可以使其跟踪正在关闭的任务状态?

python python-2.x celery python-2.7 celery-task

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

如何知道循环早期被破坏?

for(int i=0; i<len_arr; i++)
    if(arr[i] == some_num){
        printf("The idx of %d is: %d\n", some_num, i);
        break;
    }
if(i == len_arr)
    printf("Number not found.\n");
Run Code Online (Sandbox Code Playgroud)

这不起作用.因为i无法在循环外访问.

我想到了两种方法来实现我想要的效果.

但我的问题是,还有其他更优雅的方法来做这个效果吗?

方式1:

int i;
for(i=0; i<len_arr; i++)
    if(arr[i] == some_num){
        printf("The idx of %d is: %d\n", some_num, i);
        break;
    }
if(i == len_arr)
    printf("Number not found.\n");
Run Code Online (Sandbox Code Playgroud)

方式2:

for(int i=0; (i<len_arr) && (printf("Number not found.\n")); i++)
    if(arr[i] == some_num){
        printf("The idx of %d is: %d\n", some_num, i);
        break;
    }
Run Code Online (Sandbox Code Playgroud)

c++ c99 c++11 c++14

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

标签 统计

python ×4

bash ×1

c++ ×1

c++11 ×1

c++14 ×1

c99 ×1

celery ×1

celery-task ×1

codec ×1

logging ×1

opencv ×1

python-2.7 ×1

python-2.x ×1

shell ×1

sqlalchemy ×1

video ×1

vim ×1