小编elm*_*lmo的帖子

C++符号范围搜索顺序与模板和非模板类不同?

#include <iostream>

void foo()
{
    std::cout << "global foo()" << std::endl;
}

struct A {
    void foo()
    {
        std::cout << "A::foo()" << std::endl;
    }
};

struct B : public A {
    void call()
    {
        foo();
    }
};

int main(int argc, char **argv )
{
    B b;
    b.call();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这给出了预期的结果:

A::foo()
Run Code Online (Sandbox Code Playgroud)

但是在更改了两行之后(B类到模板):

#include <iostream>

void foo()
{
    std::cout << "global foo()" << std::endl;
}

struct A {
    void foo()
    {
        std::cout << "A::foo()" << std::endl;
    }
}; …
Run Code Online (Sandbox Code Playgroud)

c++ templates scope

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

SCons生成可变数量的目标

我试图SCons生成多个目标(直接编号未知SConscript).

我有这样的目录:

headers/
  Header1.h
  Header2.h
  Header3.h
  Header4.h
meta/
  headers_list.txt
Run Code Online (Sandbox Code Playgroud)

现在我想要SConscript读取headers_list.txt,基于其内容选择文件从headers/目录(即它可能只包含Header1Header3),对于我想要使用某些函数生成源的每一个.

我一直试图用env.Command它来做,但问题是它需要调用者指定目标列表,由于显而易见的原因在调用时不知道env.Command.

我唯一能想到的就是跑步:

for header in parse( headers_file ):
    source = mangle_source_name_for_header( header )
    env.Command( source, header, generator_action )
Run Code Online (Sandbox Code Playgroud)

但这意味着parse( headers_file )每次调用时我都会运行scons.如果解析成本高昂且文件不经常更改,则可以轻松缓存此步骤.

为实现缓存,我缺少什么SConsc构造/类/技术?

编辑:

看来我的问题类似于SCons目标的构建时间确定,但是没有人工虚拟文件的技术吗?

此外,即使使用临时文件,我也看不出我应该如何将target变量从Command生成可变数量的目标传递给第二个将迭代它们的目标.

编辑2:

很有希望.

python code-generation scons

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

Flask:如何检测无限响应生成器中的断开连接?

flask中,我有一个用于EventSource接收更新/事件的页面。

它以相当简单的方式实现:

@route('/updates')
def updates():
    def gen():
        while True:
            update = make_update()
            yield "data: {0}\n\n".format(json.dumps(update))
return Response(stream_with_context(gen()), mimetype="text/event-stream")
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,每次我重新加载连接EventSource到“更新”页面的页面时,它都会创建一个新线程来满足该“更新”请求。而且它永远不会死

正在进行更新,因此这意味着它将数据推送到某个地方,从而使我的服务器使用越来越多的线程以及越来越多的内存。

我希望获得的简单解决方案是while True用某种形式的替换while is_connected()

但是我似乎找不到找到检测浏览器是否仍处于连接状态的方法。

问题:如何在发生器内部检查连接是否仍然有效?

编辑

浏览代码似乎应该调用close()generator,因此从理论上讲它应该GeneratorExit在my中的某个位置抛出gen()

但是,我看不到有任何发生的痕迹,并且每次调用时,我都会看到pstree在每次请求/连接后又产生一个条目/updates

python wsgi werkzeug flask eventsource

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

如何链接非线程安全库,以便每个线程都有自己的全局变量?

我有一个程序,我链接到许多库.我在profiler上运行我的应用程序,发现在一些网络请求之后大部分时间都花在"等待"状态.这些请求是我sleeping_function()从外部库调用代码的效果.我在循环中调用此函数,该循环执行很多次,因此所有等待时间总计达到大量.

由于我无法修改,sleeping_function()我想启动一些线程并行运行我的循环的几次迭代.问题是这个函数在内部使用了一些全局变量.

有没有办法告诉SunOS上的链接器我想以一种将所有变量放在线程本地存储中的方式链接特定库?

c c++ ssl thread-safety sunos

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

Django - 如何使用QuerySet过滤来获取对象的子集?

根据文件:

filter(**kwargs)返回包含与给定查找参数匹配的对象的新QuerySet.

查找参数(**kwargs)应采用下面的字段查找中描述的格式.多个参数通过基础SQL语句中的AND连接.

对我来说,这表明它将返回原始集合中的项目子集.但是我似乎错过了一些东西,因为下面的示例并不像我期望的那样:

>>> kids = Kid.objects.all()
>>> tuple(k.name for k in kids)
(u'Bob',)
>>> toys = Toy.objects.all()
>>> tuple( (t.name, t.owner.name) for t in toys)
((u'car', u'Bob'), (u'bear', u'Bob'))
>>> subsel = Kid.objects.filter( owns__in = toys )
>>> tuple( k.name for k in subsel )
(u'Bob', u'Bob')
>>> str(subsel.query)
'SELECT "bug_kid"."id", "bug_kid"."name" FROM "bug_kid" INNER JOIN "bug_toy" ON ("bug_kid"."id" = "bug_toy"."owner_id") WHERE "bug_toy"."id" IN (SELECT U0."id" FROM "bug_toy" U0)'
Run Code Online (Sandbox Code Playgroud)

正如你在上面看到的那样,subsel最终会返回重复的记录,这不是我想要的.我的问题是获得子集的正确方法是什么?(注意:按定义设置不会出现多次出现的同一个对象)

解释为什么 …

python django

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