我希望在工作中开始在大量基于Python的项目上使用DBC,并且想知道其他人对它有什么经验.到目前为止,我的研究结果如下:
我的问题是:您是否将DBC与Python一起用于成熟的生产代码?它的效果如何/值得努力?你会推荐哪些工具?
Tornado宣称自己是"一个相对简单,无阻塞的 Web服务器框架",旨在解决C10k问题.但是,看看包装MySQLdb的数据库包装器,我遇到了以下代码:
def _execute(self, cursor, query, parameters):
try:
return cursor.execute(query, parameters)
except OperationalError:
logging.error("Error connecting to MySQL on %s", self.host)
self.close()
raise
Run Code Online (Sandbox Code Playgroud)
据我知道的MySQLdb的,它是建立在顶部的呼叫libmysqlclient,被拦截.
我是否正确地认为长时间运行的查询会导致整个Tornado服务器无响应直到它完成或代码上有魔力?
我正在处理的应用程序的一部分是一个简单的基于pthread的服务器,它通过TCP/IP套接字进行通信.我在C中编写它是因为它将在内存受限的环境中运行.我的问题是:如果其中一个线程遇到返回NULL的malloc(),程序应该怎么做?到目前为止我想出的可能性:
第一种选择显然是最简单的,但似乎非常错误.第二个也似乎错了,因为我不确切知道会发生什么.第三个选项,似乎除了两个问题诱人的:首先,所有的线程不需要在正常情况下和第二连接回主线程,以完成该线程执行,其余大部分线程必须调用malloc( )无论如何.
我该怎么办?
import datetime, json
x = {'alpha': {datetime.date.today(): 'abcde'}}
print json.dumps(x)
Run Code Online (Sandbox Code Playgroud)
上面的代码失败,TypeError因为JSON对象的键需要是字符串.该json.dumps函数有一个名为default的参数,当JSON对象的值引发a 时调用该参数TypeError,但似乎无法为该键执行此操作.解决这个问题最优雅的方法是什么?
以下代码在Chrome和Firefox中产生语法错误,但不会产生Node.js:
{"hello": 1}
Run Code Online (Sandbox Code Playgroud)
但是,以下代码无处不在:
var x = {"hello": 1}
Run Code Online (Sandbox Code Playgroud)
此外,以下工作无处不在:
{hello: 1}
Run Code Online (Sandbox Code Playgroud)
这种奇怪的行为有什么解释?
我试图用Node.js提供一些JavaScript文件,无论出于何种原因,文件在传输过程中被切断.代码:
httpsServer = http.createServer(function(req, res) {
var path = url.parse(req.url).pathname;
if (path[path.length - 1] == '/') {
path += 'index.html';
}
fs.readFile(root + path, function(err, data){
if (err) return send404(res);
res.writeHead(200, {
'Content-Type': getMimeType(getExtension(path)),
'Content-Length': data.length});
res.end(data);
});
}),
var privateKey = fs.readFileSync(settings.PRIVATE_KEY).toString();
var certificate = fs.readFileSync(settings.CERTIFICATE).toString();
var credentials = crypto.createCredentials({key: privateKey, cert: certificate});
httpsServer.setSecure(credentials);
httpsServer.listen(settings.HTTPS_PORT);
Run Code Online (Sandbox Code Playgroud)
文件http://github.com/LearnBoost/Socket.IO/raw/master/socket.io.js和http://code.jquery.com/jquery-1.4.2.min.js.第一个是正确的32KB,第二个正好是16KB.这不会通过HTTP发生,只会通过HTTPS发生,而且只能通过网络发生(例如:不是来自localhost).
任何帮助将非常感激.
我有类似下面的代码在后台进程中运行:
def run()
while True:
objs = MyModel.objects.filter(last_updated < time.time() - FREQUENCY)
print objs
def update()
while True:
# some processing code
mymodel.last_updated = time.time()
mymodel.save()
Run Code Online (Sandbox Code Playgroud)
上述函数在两个独立的线程中运行:update()依次更新所有模型,而run()选择需要更新的模型.这一切都针对MySQL运行,而MyModel则存在于InnoDB表中.
问题是run()总是看到last_updated的相同值.原因是它位于事务内部并选择数据的一致快照.当然,我希望它选择最新的数据.如果我执行以下操作,它可以工作:
def run()
from django.db import connection
while True:
connection.connection.execute('SET autocommit = 1')
objs = MyModel.objects.filter(last_updated < time.time() - FREQUENCY)
print objs
Run Code Online (Sandbox Code Playgroud)
但这意味着我将每次执行一次额外的查询.最重要的是,如果连接在我设置autocommit = 1和下面的select之间关闭,它将无法工作.
Postgres很乐意支持这个:http://docs.djangoproject.com/en/dev/ref/databases/#autocommit-mode(至少根据文档),但是有没有办法为MySQL启用自动提交?
此外,由于它作为后台进程运行,因此不会处理任何请求,也不会涉及中间件.
使用jQuery我可以这样做:
var x = $('#hello');
x = x.add('#bye');
Run Code Online (Sandbox Code Playgroud)
这样我在名为x的查询集中同时包含#hello和#bye元素.Dojo中是否有类似的功能?
python ×3
mysql ×2
c ×1
django ×1
dojo ×1
javascript ×1
jquery ×1
json ×1
malloc ×1
node.js ×1
nonblocking ×1
pthreads ×1
tornado ×1
transactions ×1