小编Tom*_*Tom的帖子

Sqlalchemy - for循环中查询和查询之间的区别

我想问一下两者之间的区别

for row in session.Query(Model1):
    pass
Run Code Online (Sandbox Code Playgroud)

for row in session.Query(Model1).all():
    pass
Run Code Online (Sandbox Code Playgroud)

是第一个以某种方式用单个查询轰炸你的数据库的迭代器,而后者"急切地"将整个事件作为一个列表(如range(x)vs xrange(x))查询?

sqlalchemy

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

在Python中处理异常的正确方法?

我搜索了其他帖子,因为我觉得这是一个相当常见的问题,但我发现的所有其他Python异常问题都没有反映我的问题.

我会尽量在这里具体说明,所以我将举一个直接的例子.并且pleeeeease不会针对此特定问题发布任何变通方法.我对你如何使用xyz发送更好的电子邮件并不感兴趣.我想知道你一般如何处理依赖的,容易出错的语句.

我的问题是,如何很好地处理异常,相互依赖的异常,意思是:只有第一步成功,尝试下一步,依此类推.还有一个标准是:必须捕获所有异常,此代码必须是健壮的.

供您考虑的一个例子:

try:
    server = smtplib.SMTP(host) #can throw an exception
except smtplib.socket.gaierror:
    #actually it can throw a lot more, this is just an example
    pass
else: #only if no exception was thrown we may continue
    try:
        server.login(username, password)
    except SMTPAuthenticationError:
        pass # do some stuff here
    finally:
        #we can only run this when the first try...except was successful
        #else this throws an exception itself!
        server.quit() 
    else:
        try:
            # this is already the 3rd nested try...except
            # for such …
Run Code Online (Sandbox Code Playgroud)

python exception

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

无法理解LARGE_INTEGER结构

使用C++和一些Winapi的东西,我遇到了这个人:

#if defined(MIDL_PASS)
typedef struct _LARGE_INTEGER {
#else // MIDL_PASS
typedef union _LARGE_INTEGER {
    struct {
        DWORD LowPart;
        LONG HighPart;
    };
    struct {
        DWORD LowPart;
        LONG HighPart;
    } u;
#endif //MIDL_PASS
    LONGLONG QuadPart;
} LARGE_INTEGER;
Run Code Online (Sandbox Code Playgroud)

所以,我看到它的方式,取决于MIDL_PASS的设置与否,这是一个非常紧凑的结构,只有一个LONGLONG,或更有趣的情况,这成为一个联合.

如果这是一个联合,我仍然有意义,有两个可能的访问权限,一个LONGLONG在一个块中,一个结构有Low和Highpart.到现在为止还挺好.

但我无法理解结构被声明两次,相同的事实.它们似乎都是匿名的,但后者可以通过"u"获得.

现在问我的问题:

为什么两个结构被定义(冗余?),第一个结构的目的是什么,如果我甚至无法访问它,由于没有绑定到任何类型/变量名称.

c++ winapi data-structures

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

在构造函数中运行可能失败的代码的不良做法?

我的问题是一个设计问题.在Python中,如果"构造函数"中的代码失败,则对象最终不会被定义.从而:

someInstance = MyClass("test123") #lets say that constructor throws an exception
someInstance.doSomething() # will fail, name someInstance not defined.
Run Code Online (Sandbox Code Playgroud)

我确实有一种情况,如果我从构造函数中删除容易出错的代码,会发生很多代码复制.基本上我的构造函数填充了一些属性(通过IO,很多可能出错),可以使用各种getter访问.如果我从构造函数中删除代码,我将有10个带有复制粘贴代码的getter:

  1. 是属性真的设置?
  2. 执行一些IO操作来填充属性
  3. 返回有问题的变量的内容

我不喜欢这样,因为我的所有getter都会包含很多代码.而不是我在中心位置,构造函数中执行我的IO操作,并填充我的所有属性.

这是一个正确的方法吗?

python oop constructor exception-handling

15
推荐指数
3
解决办法
9340
查看次数

如何获得非阻塞套接字connect()?

我这里有一个非常简单的问题.我需要同时与很多主机通信,但我并不需要任何同步,因为每个请求都非常自给自足.

因此,我选择使用异步套接字,而不是发送垃圾邮件.现在我有一点问题:

异步的东西就像魅力一样,但当我连接到100个主机,并且我得到100次超时(超时= 10秒)然后我等待1000秒,只是为了找出我的所有连接都失败了.

有没有办法得到非阻塞套接字连接?我的套接字已设置为nonBlocking,但对connect()的调用仍然是阻塞的.

减少超时是不可接受的解决方案.

我在Python中这样做,但我想在这种情况下编程语言并不重要.

我真的需要使用线程吗?

python sockets asynchronous nonblocking

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

直接访问成员变量或作为参数传递?

我注意到,即使尊重OOD的单一责任原则,有时课程仍然会变得很大.有时直接在方法中访问成员变量感觉就像拥有全局状态一样,当前范围中存在很多东西.仅通过查看当前工作的方法,就不可能确定当前范围中可访问的invidiual变量的来源.

最近和朋友一起工作时,我意识到我编写了比他更详细的代码,因为我将成员变量作为参数传递给每个方法.

这是不好的做法吗?

编辑:示例:

class AddNumbers {
public:
    int a, b;
    // ...
    int addNumbers {
        // I could have called this without arguments like this:
        // return internalAlgorithmAddNumbers();
        // because the data needed to compute the result is in members.
        return internalAlgorithmAddNumbers(a,b);
    }

private:
    int internalAlgorithmAddNumbers(int sum1, int sum2) { return sum1+sum2; }
};
Run Code Online (Sandbox Code Playgroud)

c++ oop readability

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

Python解释器阻止多线程DNS请求?

我只是用python和线程玩了一下,甚至在多线程脚本中实现了DNS请求阻塞.请考虑以下脚本:

来自线程导入线程导入套接字

class Connection(Thread):
    def __init__(self, name, url):
        Thread.__init__(self)
        self._url = url
        self._name = name

    def run(self):
        print "Connecting...", self._name
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.setblocking(0)
            s.connect((self._url, 80))
        except socket.gaierror:
            pass #not interested in it
        print "finished", self._name


if __name__ == '__main__':
    conns = []
    # all invalid addresses to see how they fail / check times
    conns.append(Connection("conn1", "www.2eg11erdhrtj.com"))
    conns.append(Connection("conn2", "www.e2ger2dh2rtj.com"))
    conns.append(Connection("conn3", "www.eg2de3rh1rtj.com"))
    conns.append(Connection("conn4", "www.ege2rh4rd1tj.com"))
    conns.append(Connection("conn5", "www.ege52drhrtj1.com"))

    for conn in conns:
        conn.start()
Run Code Online (Sandbox Code Playgroud)

我不知道超时的确切时间,但运行时会发生以下情况:

  1. 所有线程开始,我得到我的打印输出
  2. 每隔xx秒,一个线程显示完成,而不是一次完成
  3. 线程按顺序完成,而不是一次完成(超时=全部相同!)

所以我唯一的猜测是这与GIL有关吗?显然,线程不会同时执行任务,一次只能尝试一个连接.

有没有人知道这方面的方法?

(asyncore …

python multithreading network-programming

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

用asyncore阅读网站

我想异步读一个网站,据我所知,urllib是不可能的.现在我尝试用普通套接字阅读,但HTTP给了我地狱.我遇到了所有类似的时髦编码,例如transfer-encoding:chunked,必须手动解析所有这些东西,我觉得编码C,而不是python.

不是像URLLib那样更好的方式,异步吗?我真的不想重新实现整个HTTP规范,而之前已经完成了.

Twisted目前不是一个选项.

问候,

汤姆

python sockets web-services

7
推荐指数
2
解决办法
2330
查看次数

使用WSGI创建动态图像,不涉及任何文件

我想将动态创建的图像发送给我的用户,例如图表,图形等.这些图像是"丢弃"图像,它们只会被发送给一个用户然后被销毁,因此"没有涉及文件".

我想将图像直接发送给用户,而不是先将其保存在文件系统中.使用PHP,可以通过将HTML文件中的图像链接到PHP脚本来实现,例如:

编辑:SO吞下我的图片标签:

<img src="someScript.php?param1=xyz">
Run Code Online (Sandbox Code Playgroud)

然后,脚本将正确的标头(filetype => jpeg等)发送到浏览器,并直接将图像写回客户端,而不会将其临时保存到文件系统.

我怎么能用WSGI应用程序做这样的事情.目前我正在使用Python的内部SimpleWSGI服务器.我知道这个服务器主要用于演示目的而不是实际使用,因为它缺乏多线程功能,所以请不要指出这一点,我知道这一点,现在它满足了我的要求: )

是否真的像将URL放入图像标签并使用WSGI处理请求一样简单,还是有更好的做法?

有没有人有这方面的经验,可以给我一些指示(请不要32位)

谢谢,

汤姆

python wsgi image-processing

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

C#中的泛型"as"和"is"有麻烦,"is"检查失败

我遇到了C#泛型的麻烦:

MappingAdapter是FullMappingAdapter和LiteMappingAdapter继承/实现的常见抽象基类.

创建我的泛型类会话的实例:

session = new Session<FullMappingAdapter>(
// ...
)
Run Code Online (Sandbox Code Playgroud)

在会话中,决定我们是什么类型的会话:

// class declaration:
public class Session<T> :  ISession
                           where T : MappingAdapter {
    // ...
    // method body:
    T t = null;
    if (t is FullMappingAdapter) {
        // need parameter, cannot use where T : new() above
        t = new FullMappingAdapter(someData) as T;
    } else if (t is LiteMappingAdapter) {
        t = new LiteMappingAdapter(someData) as T;
    } else {
        throw new NotSupportedException("Unknown Adapter specified, please fix.");
    }

    // ... …
Run Code Online (Sandbox Code Playgroud)

c# generics

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