小编Ano*_*oop的帖子

Python 2.6 vs 2.7多线程性能问题(futex)

我有一个简单的Monte-Carlo Pi计算程序.我尝试在2个不同的盒子上运行它(相同的硬件,内核版本略有不同).我发现在一种情况下(两倍的时间)性能显着下降.没有线程,性能大致相同.对程序的分析执行表明,较慢的程序每个futex调用花费较少的时间.

  • 这与任何内核参数有关吗?
  • CPU标志会影响futex性能吗?/ proc/cpuinfo表示cpu标志略有不同.
  • 这有点与python版本有关吗?

Linux(3.10.0-123.20.1(Red Hat 4.4.7-16))Python 2.6.6

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
99.69   53.229549           5  10792796   5385605 futex

Profile Output
============== 
256 function calls in 26.189 CPU seconds

Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
   39   26.186    0.671   26.186    0.671 :0(acquire)
Run Code Online (Sandbox Code Playgroud)

Linux(3.10.0-514.26.2(Red Hat 4.8.5-11))Python 2.7.5

 % time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 99.69   94.281979           8  11620358   5646413 futex

Profile Output …
Run Code Online (Sandbox Code Playgroud)

python linux multithreading futex

7
推荐指数
1
解决办法
404
查看次数

PostgreSql中索引字符串列类型的索引

是否可以在类型为字符串数组的列上创建索引.尝试使用GIN索引.但查询似乎没有使用这些索引.

Example

CREATE TABLE users (
 name VARCHAR(100),
 groups text[],
);

Query: SELECT name FROM users WHERE ANY(groups) = 'Engineering'.
Run Code Online (Sandbox Code Playgroud)

另外,在'groups'列上有效执行GROUP BY的最佳方法是什么,以便它可以给'组'和计数.

database postgresql

6
推荐指数
1
解决办法
3755
查看次数

Postgresql ORDER BY - 选择正确的索引

T(user, timestamp,...)100毫升+记录的表(PostgreSQL 9.1).

表单的查询

SELECT * 
FROM T 
WHERE user='abcd' 
ORDER BY timestamp 
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

timestamp当有大约100000个用户记录时,使用索引而不是用户索引.

使用时间戳索引总是会得到较差的结果(20秒以上),因为它最终会扫描所有记录.timestamp通过更改要使用的查询来绕过索引ORDER BY DATE(timestamp)将导致查询求助于用户索引并给出小于100毫秒的结果.

  • 总RAM:64 GB
  • shared_buffers:16 GB
  • work_mem:32 MB

为什么postgresql忽略user索引timestamp而是使用索引(时间戳索引需要查看所有记录)?是否有任何postgresql配置参数可以更改,以使查询使用用户名索引本身?

sql postgresql query-optimization

6
推荐指数
1
解决办法
777
查看次数

Python json内存臃肿

import json
import time
from itertools import count

def keygen(size):
    for i in count(1):
        s = str(i)
        yield '0' * (size - len(s)) + str(s)

def jsontest(num):
    keys = keygen(20)
    kvjson = json.dumps(dict((keys.next(), '0' * 200) for i in range(num)))
    kvpairs = json.loads(kvjson)
    del kvpairs # Not required. Just to check if it makes any difference                            
    print 'load completed'

jsontest(500000)

while 1:
    time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

Linux top表明在'jsontest'函数完成后,python进程保存了~450Mb的RAM.如果省略对' json.loads ' 的调用,则不会出现此问题.执行此函数后 的gc.collect 会释放内存.

看起来内存没有保存在任何缓存或python的内部内存分配器中,因为对gc.collect的显式调用正在释放内存.

这是否发生是因为从未达到垃圾收集的门槛(700,10,10)?

我确实在jsontest之后放了一些代码来模拟阈值.但它没有帮助.

python json garbage-collection

5
推荐指数
1
解决办法
2967
查看次数

nginx proxy_pass 动态主机名部分

当nginx的proxy_pass预计在URL代主机部分是构建一个动态值,nginx的原因是没有代理请求错误:没有定义的决心解析服务,其中服务= $ 1。与其尝试解析 service.abcd.local,不如尝试解析service。有解决办法吗?

location ~ ^/(.*)/(.*)$ {
  proxy_pass http://$1.abcd.local/$1/$2;   
}
Run Code Online (Sandbox Code Playgroud)

nginx

4
推荐指数
1
解决办法
5813
查看次数