小编the*_*n29的帖子

Python分析:KCacheGrind + Yappi不断显示未知函数

我想分析我的Python程序,以了解为什么它这么慢。我决定使用Yappi(因为我的程序是多线程的),并使用KCacheGrind显示结果。这是我的方法:

# Profile of the update method
def profile_update(table, start, end):
    print("Profiling update() on the %s table..." % (table))
    yappi.start(builtins=True)
    app.update(...)
    stats = yappi.get_func_stats()
    output_name = "profiler_%s.out." % (table) + datetime.now().isoformat()
    stats.save("profilers_outputs/" + output_name, type='callgrind')
    yappi.stop()
    yappi.clear_stats()
    print('\n\n\n')
Run Code Online (Sandbox Code Playgroud)

方法更新用于从数据库中获取数据,其时间范围在开始和结束之间。

输出文件已正确创建,但是当我启动KCacheGrind时,它会输出很多错误,如下所示:

kcachegrind(35484): Loading "profilers_outputs/profiler_benchmark.out.2019-06-26T17:21:41.147461" : 17529 :  "Undefined compressed function index 586"
kcachegrind(35484): Loading "profilers_outputs/profiler_benchmark.out.2019-06-26T17:21:41.147461" : 17529 :  "Invalid called function, setting to unknown"
Run Code Online (Sandbox Code Playgroud)

最后,我得到了这个调用图,其中所有未识别的函数都被汇总为一个,从而使其变得混乱且完全不相关。有谁知道为什么会这样吗?

python profiler kcachegrind yappi

7
推荐指数
0
解决办法
95
查看次数

PostgreSQL C函数:libpq不链接?

我想为PostgreSQL编写一个C函数。对于此功能,我将需要使用libpq查询一些数据,因此我首先编写了一个虚拟函数来测试此部分:

#define _XOPEN_SOURCE

#include <libpq-fe.h>
#include <postgres.h>
#include <fmgr.h>
#include <funcapi.h>
#include <executor/executor.h>

#include "test.h"

PG_FUNCTION_INFO_V1(getAnnotation);
Datum getAnnotation(PG_FUNCTION_ARGS) {
    // Connection to the database
    PGconn *conn = PQsetdbLogin("localhost",
                         "5432",
                         "",
                         "",
                         "postgres",
                         "postgres",
                         "password");

    // Databases names
    PGresult *res = PQexec (conn, "SELECT user FROM activity LIMIT 1;");
    VarChar* i = PQgetvalue(res, 0, 0);
    PG_RETURN_VARCHAR_P(i);
}
Run Code Online (Sandbox Code Playgroud)

它只是应该返回我的一个表的第一行的第一列。很简单吧?好吧,它不起作用。

当我尝试在psql中使用它时,它说:

ERROR:  could not load library "/usr/local/lib/postgresql/test.so": Error relocating /usr/local/lib/postgresql/test.so: PQexec: symbol not found
Run Code Online (Sandbox Code Playgroud)

奇怪的是,两者PQsetdbLoginPQexec都在libpq-fe.h文件中,但是只有第二个会导致错误。如果我评论这一PQexec行,那么 …

c postgresql

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

如何在 PostgreSQL 中使用 LAST_VALUE?

我有一个小表格来尝试了解该LAST_VALUE函数在 PostgreSQL 中的工作原理。它看起来像这样:

 id | value
----+--------
  0 | A
  1 | B
  2 | C
  3 | D
  4 | E
  5 | [null]
  6 | F
Run Code Online (Sandbox Code Playgroud)

我想要做的是使用LAST_VALUE先行的非NULL值来填充NULL值,所以结果应该是这样的:

 id | value
----+--------
  0 | A
  1 | B
  2 | C
  3 | D
  4 | E
  5 | E
  6 | F

Run Code Online (Sandbox Code Playgroud)

我试图完成的查询是:

SELECT LAST_VALUE(value)
OVER (PARTITION BY id ORDER BY case WHEN value IS NULL THEN 0 ELSE 1 END ASC)
FROM test; …
Run Code Online (Sandbox Code Playgroud)

sql postgresql window-functions

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

在 Prefect 中循环任务

我想一次又一次地循环执行任务,直到达到某个条件,然后再继续其余的工作流程。

到目前为止我所拥有的是这样的:

# Loop task
class MyLoop(Task):
    def run(self):
        loop_res = prefect.context.get("task_loop_result", 1)
        print (loop_res)
        if loop_res >= 10:
            return loop_res
        raise LOOP(result=loop_res+1)
Run Code Online (Sandbox Code Playgroud)

但据我了解,这不适用于多个任务。有没有办法进一步返回并一次循环执行多个任务?

python workflow prefect

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

PostgreSQL/dblink:发送带有文本参数条件的查询

我正在尝试编写一个函数,使用 dblink 将查询发送到外部数据库,但我需要在文本列上放置一个条件,但它不起作用。看起来像这样;

CREATE OR REPLACE FUNCTION dblink_test(param VARCHAR(32))
RETURNS TABLE (...) AS $$
BEGIN
    PERFORM dblink_connect('myconn', ...);
    RETURN QUERY SELECT * FROM dblink('myconn',
        format('SELECT * FROM someTable where name= %s', param));
END
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

但它返回一个类似的错误column "param" does not exist,这真的很烦人。我该怎么做?

sql postgresql dblink

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