- 论坛徽章:
- 0
|
原帖由 gm3000 于 2009-7-13 19:11 发表
我尝试了再开几个线程,并且把数据库迁到另外一台机子上,并发写数据库,性能提高了一些,我只能说提高了一些,而且有不稳定的情况,有时候队列累积很快,有时候又基本没有累积...
不过数据库性能感觉提 ...
defer怎么可能不能和thread配合使用呢?用queue啊
比如下面
def after_db_operation(return_value_from_db_operation):
....
def submit_to_db(data):
#你必须能在这访问到queue,我们假设这个就是叫 data_queue
d = defer.Deferred()
d.addCallback(afer_db_operation) #可能你还需要一个errback,看需要来吧
data_queuq.put(d.callback,data)
这样就串起来了,当thread拿到一个queue中的数据时,第一个是defer的callback方法(在传入thread处理函数时我们假设形参叫callback_fun),第二个就是client传来的数据,当处理完成后就调用
callback_fun(return_value_from_db_operation)
这样就行了
而且你还可以并发多个数据库线程来读这个queue,这样其实你有了一个内存中的请求缓冲区。不过如果你的请求真是太多的话,最后还是会由于内存不够而崩溃,所以你还是在factory中设置一个最大连接数吧,当protocol实例太多的话直接拒绝掉 |
|