小编Cha*_*les的帖子

当exec源代码时忽略ImportError

我有一个应用程序,它在python中读取测试脚本,并通过网络发送它们,以便在远程python实例上执行.由于控制程序不需要运行这些脚本,我不希望在控制器的python环境中安装测试脚本使用的所有模块.但是,控制器确实需要测试脚本中的信息来告诉它如何运行测试.目前我所做的阅读和导入测试脚本数据是类似的

with open( 'test.py', 'r' ) as f:
    source = f.read()

m = types.ModuleType( "imported-temp", "Test module" )
co = compile( source, 'test.py', 'exec' )

exec co in m.__dict__
Run Code Online (Sandbox Code Playgroud)

这会产生一个包含测试的新模块.不幸的是,如果测试试图导入控制器没有的东西,exec将引发ImportErrors.更糟糕的是,该模块将不会完全导入.

如果我可以保证控制器不会使用丢失的模块,那么我可以忽略这些异常吗?或者通过其他方式找出测试中定义的名称和类?

示例测试:

from controller import testUnit
import somethingThatTheControllerDoesNotHave

_testAttr = ['fast','foo','function']

class PartOne( testUnit ):
    def run( self ):
        pass
Run Code Online (Sandbox Code Playgroud)

控制器需要知道的是_testAttr中的数据以及从testUnit继承的所有类定义的名称.

python

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

Visual Studio 2015中缺少"编辑并继续"选项

我不知道为什么,但我的VS 2015社区的ENC选项丢失了:

我已经在VS安装上进行了完全还原,问题不会消失.有人有这种问题吗?

c# debugging visual-studio-2015

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

计算类的实例

我正在寻找一种方法来以编程方式获取.NET和Java中某个类类型的实例数.

比方说,我有Foo课.我希望能够在同一个过程中获得Foo所有实例的当前计数.
但是我无法修改Foo,所以带有计数的静态int已经出来了.此外,我不能只将我所做的所有实例添加到某些静态列表中并计算它.我希望能够说:

System.GC.numberOf< Foo >()
Run Code Online (Sandbox Code Playgroud)

或者其他的东西.

我正在查看垃圾收集器,但我找不到任何相关的方法.

.net java testing

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

等待Twisted和PB的活动

我有一个使用多个线程的python应用程序,我很好奇在没有刻录CPU或锁定GIL的情况下在python中等待某些东西的最佳方法.

我的应用程序使用twisted和我生成一个线程来运行一个长操作,所以我不踩反应堆线程.这个长操作也会产生一些使用twisted的deferToThread执行其他操作的线程,并且原始线程想要等待deferreds的结果.

我一直在做的就是这个

while self._waiting:
    time.sleep( 0.01 )
Run Code Online (Sandbox Code Playgroud)

这似乎破坏了扭曲的PB对象接收消息所以我认为睡眠锁定了GIL.下面的海报进一步调查显示它没有.

有更好的方法可以在不阻塞下面发布的反应器线程或python的情况下等待线程.

python multithreading twisted

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

如何使抽象类正确返回另一个抽象类的具体实例?

我最近重新编写了一个自己的库来尝试将接口与实现分离.我在最后一个问题上遇到了一个用于返回另一个类的实例的类.

在接口定义中,我做了类似的事情

struct IFoo
{
    virtual const IBar& getBar() = 0;
}
Run Code Online (Sandbox Code Playgroud)

然后在具体的Foo getBar看起来像

const IBar& Foo::getBar()
{
    Bar ret = Bar();
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

问题是,一旦getBar完成就会删除ret,当复制构造函数试图像这样使用Bar时会导致严重崩溃

const Bar myBar = myFoo.getBar();
Run Code Online (Sandbox Code Playgroud)

我一直在阅读各种各样的东西,我知道通过引用返回是不受欢迎的,但我没有看到任何其他方式(我不想返回Bar*因为我不想手动删除返回值).

抽象类返回从另一个抽象类派生的具体类的实例的正确方法(如果存在任何方式)是什么?

注意我确实看到了这个解决方案:从函数返回一个抽象类, 但我不想让返回值静态和松散线程安全.

c++ abstract-class interface

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