我无法理解如何有效地正确打开和关闭数据库会话,正如我所理解的sqlalchemy文档,如果我使用scoped_session构造我的Session对象,然后使用返回的Session对象来创建会话,它的线程安全,所以基本上每个线程会得到它自己的会话,并且不会有问题.现在下面的例子工作,我把它放在一个无限循环中,看它是否正确关闭会话,如果我正确监视它(在mysql中通过执行"SHOW PROCESSLIST;"),连接只是继续增长,它不会关闭它们,即使我使用了session.close(),甚至在每次运行结束时删除了scoped_session对象.我究竟做错了什么?我在更大的应用程序中的目标是使用所需的最少数量的数据库连接,因为我当前的工作实现在需要它的每个方法中创建一个新会话,并在返回之前关闭它,这似乎效率低下.
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session
from threading import Thread
from Queue import Queue, Empty as QueueEmpty
from models import MyModel
DATABASE_CONNECTION_INFO = 'mysql://username:password@localhost:3306/dbname'
class MTWorker(object):
def __init__(self, worker_count=5):
self.task_queue = Queue()
self.worker_count = worker_count
self.db_engine = create_engine(DATABASE_CONNECTION_INFO, echo=False)
self.DBSession = scoped_session(
sessionmaker(
autoflush=True,
autocommit=False,
bind=self.db_engine
)
)
def _worker(self):
db_session = self.DBSession()
while True:
try:
task_id = self.task_queue.get(False)
try:
item = db_session.query(MyModel).filter(MyModel.id == task_id).one()
# do something with item
except Exception as exc:
# …Run Code Online (Sandbox Code Playgroud) 我开始尝试django-mutant 0.0.2(上django 1.4.2),但由于缺乏文档,我几乎无处可去.我通过项目描述理解的方式我可以用它来动态创建我的模型,所以我认为我可以用django-admin界面连接它,所以我可以创建模型并在那里定义它的所有字段.我看到像一些其他的替代品django-eav,dynamo威尔·哈代的dynamic-models,等等,但它听起来像这是最好的执行到现在,所以我想我应该用这个.
我把它放进去了settings.py:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'south',
'polymodels',
'mutant',
'mutant.contrib.boolean',
'mutant.contrib.temporal',
'mutant.contrib.file',
'mutant.contrib.numeric',
'mutant.contrib.text',
'mutant.contrib.web',
'mutant.contrib.related',
'dynamodels' # this is the name of my testapp
)
Run Code Online (Sandbox Code Playgroud)
我打开了django-mutant找出我应该做什么的来源,我认为这足以导入mutant.models.ModelDefinition并mutant.models.FieldDefinition进入我的admin.py并注册它们,所以我尝试了这个:
from django.contrib import admin
from mutant import models
class ModelDefinitionAdmin(admin.ModelAdmin):
pass
admin.site.register(models.ModelDefinition, ModelDefinitionAdmin)
class FieldDefinitionAdmin(admin.ModelAdmin):
pass
admin.site.register(models.FieldDefinition, FieldDefinitionAdmin)
Run Code Online (Sandbox Code Playgroud)
在syncdb之后,我让它运行了,我的管理界面中有一个"突变"部分,里面有"模型定义"和"字段".我成功添加了一个模型,虽然我无法指定列表中的任何appname INSTALLED_APPS.添加一个字段失败了,因为它的Model def …
根据标准- 聚合或联合类型,在其元素或非静态数据成员(包括递归地,子聚合或包含的联合的元素或非静态数据成员)中包括上述类型之一,这是允许的:
struct foo {
float x;
};
void bar(foo*);
float values[9];
bar(reinterpret_cast<foo*>(&values));
Run Code Online (Sandbox Code Playgroud)
但是,我不确定以下示例是否也遵循此规则:
struct foo {
float x;
float y;
float z;
};
void bar(foo*);
float values[9];
assert((sizeof(values) / sizeof(float)) % 3 == 0); // sanity check
bar(reinterpret_cast<foo*>(&values));
Run Code Online (Sandbox Code Playgroud) #main {
margin: auto;
padding: 0;
width: 95%;
}
#left-wrapper {
display: block;
}
#content {
height: 500px;
white-space: nowrap;
overflow-y: auto;
overflow-x: scroll;
}
<div id="main">
<table>
<tr>
<td>
<div id='left-wrapper'>
</div>
</td>
<td>
<div id='content'>
<table>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
</div>
Run Code Online (Sandbox Code Playgroud)
内容包装器包含一个表,其中包含一些大小未知的数据,并且不能被包装,因此设置了 white-space:nowrap ,并且它工作正常。内容div的高度有固定大小,垂直滚动条显示正常。主 div 的宽度设置为 95%。问题是当数据太长而无法容纳时,内容 div 不会激活滚动条,而是将自身调整到屏幕右侧,即使包装器主 div 的宽度设置为 95%。有没有办法在不设置宽度的情况下激活内容 div …
我在Ubuntu 12.04(amd64)上使用PyQt 4.9.1(尝试使用python 2.6和2.7)来制作无头浏览器,但我得到了:程序收到信号SIGSEGV,Segmentation fault.这是该程序的简化版本(仍然很长一点):
# -*- coding: utf-8 -*-
from pyvirtualdisplay import Display
display = Display(visible=False, size=(1024, 768), color_depth=24)
display.start()
from PyQt4.QtGui import QApplication
#from PySide.QtGui import QApplication
app = QApplication([])
import qt4reactor
qt4reactor.install()
from twisted.web import server
from twisted.web.xmlrpc import XMLRPC
from twisted.internet import defer
from PyQt4.QtWebKit import QWebSettings, QWebView, QWebPage
from PyQt4.QtNetwork import QNetworkAccessManager, QNetworkRequest
from PyQt4.QtCore import QUrl, QByteArray, QTimer
class CustomQNetworkAccessManager(QNetworkAccessManager):
def __init__(self, *args, **kwargs):
super(CustomQNetworkAccessManager, self).__init__(*args, **kwargs)
self.sslErrors.connect(self._ssl_errors)
def _ssl_errors(self, reply, errors):
reply.ignoreSslErrors()
for …Run Code Online (Sandbox Code Playgroud) 我一直在阅读各种python编码风格指南,SO上的一些答案等等,但没有一个提到一些可能不是那么重要的问题,但我想知道是否有一种首选的方法:
如果我有一个字典,哪种风格会更好用:
dict_name = {'test': 'somevalue',
'test2': 'other'}
Run Code Online (Sandbox Code Playgroud)
要么
dict_name = {
'longer_key': 'somevalue',
'longer_key2': 'other'
}
Run Code Online (Sandbox Code Playgroud)
要么
dict_name = {
'test': 'somevalue',
'test2': 'other'
}
Run Code Online (Sandbox Code Playgroud)
要么
dict_name = {
'test': 'somevalue',
'test2': 'other'
}
Run Code Online (Sandbox Code Playgroud)
或者是其他东西?
也适用于调用方法时:
function_name(longer_arg1, longer_arg2, longer_arg3,
longer_arg4)
Run Code Online (Sandbox Code Playgroud)
要么
function_name(longer_arg1, longer_arg2, longer_arg3,
longer_arg4)
Run Code Online (Sandbox Code Playgroud)
要么
function_name(
longer_arg1,
longer_arg2,
longer_arg3,
longer_arg4
)
Run Code Online (Sandbox Code Playgroud)
要么
function_name(
longer_arg1,
longer_arg2,
longer_arg3,
longer_arg4
)
Run Code Online (Sandbox Code Playgroud)
或者是其他东西?
当使用更长的记录行时,让我们说:
loggername.info('this is an awfully long line which must be separated'
'into two lines, am I doing it right? …Run Code Online (Sandbox Code Playgroud)