我想问一下两者之间的区别
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))查询?
我搜索了其他帖子,因为我觉得这是一个相当常见的问题,但我发现的所有其他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) 使用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"获得.
现在问我的问题:
为什么两个结构被定义(冗余?),第一个结构的目的是什么,如果我甚至无法访问它,由于没有绑定到任何类型/变量名称.
我的问题是一个设计问题.在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:
我不喜欢这样,因为我的所有getter都会包含很多代码.而不是我在中心位置,构造函数中执行我的IO操作,并填充我的所有属性.
这是一个正确的方法吗?
我这里有一个非常简单的问题.我需要同时与很多主机通信,但我并不需要任何同步,因为每个请求都非常自给自足.
因此,我选择使用异步套接字,而不是发送垃圾邮件.现在我有一点问题:
异步的东西就像魅力一样,但当我连接到100个主机,并且我得到100次超时(超时= 10秒)然后我等待1000秒,只是为了找出我的所有连接都失败了.
有没有办法得到非阻塞套接字连接?我的套接字已设置为nonBlocking,但对connect()的调用仍然是阻塞的.
减少超时是不可接受的解决方案.
我在Python中这样做,但我想在这种情况下编程语言并不重要.
我真的需要使用线程吗?
我注意到,即使尊重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) 我只是用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)
我不知道超时的确切时间,但运行时会发生以下情况:
所以我唯一的猜测是这与GIL有关吗?显然,线程不会同时执行任务,一次只能尝试一个连接.
有没有人知道这方面的方法?
(asyncore …
我想异步读一个网站,据我所知,urllib是不可能的.现在我尝试用普通套接字阅读,但HTTP给了我地狱.我遇到了所有类似的时髦编码,例如transfer-encoding:chunked,必须手动解析所有这些东西,我觉得编码C,而不是python.
不是像URLLib那样更好的方式,异步吗?我真的不想重新实现整个HTTP规范,而之前已经完成了.
Twisted目前不是一个选项.
问候,
汤姆
我想将动态创建的图像发送给我的用户,例如图表,图形等.这些图像是"丢弃"图像,它们只会被发送给一个用户然后被销毁,因此"没有涉及文件".
我想将图像直接发送给用户,而不是先将其保存在文件系统中.使用PHP,可以通过将HTML文件中的图像链接到PHP脚本来实现,例如:
编辑:SO吞下我的图片标签:
<img src="someScript.php?param1=xyz">
Run Code Online (Sandbox Code Playgroud)
然后,脚本将正确的标头(filetype => jpeg等)发送到浏览器,并直接将图像写回客户端,而不会将其临时保存到文件系统.
我怎么能用WSGI应用程序做这样的事情.目前我正在使用Python的内部SimpleWSGI服务器.我知道这个服务器主要用于演示目的而不是实际使用,因为它缺乏多线程功能,所以请不要指出这一点,我知道这一点,现在它满足了我的要求: )
是否真的像将URL放入图像标签并使用WSGI处理请求一样简单,还是有更好的做法?
有没有人有这方面的经验,可以给我一些指示(请不要32位)
谢谢,
汤姆
我遇到了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) python ×6
c++ ×2
oop ×2
sockets ×2
asynchronous ×1
c# ×1
constructor ×1
exception ×1
generics ×1
nonblocking ×1
readability ×1
sqlalchemy ×1
web-services ×1
winapi ×1
wsgi ×1