我一直在思考这个问题:
您是否可以利用您拥有多个CPU的优势,在多核计算机上构建更快的基础数据结构(即链表,哈希表,集合,跳转列表,布隆过滤器,红黑树等)?
我做了一些pthreads的初步试验,发现pthread_create()的顺序为30us,但是一个简单的hash_map插入所花费的时间远远少于单个核心.因此,我很难想象创建一个更快的hash_map <>,因为同步原语和线程创建是如此之慢.我还可以想象树的遍历和并行平衡,但同样,同步原语似乎会使运行时更长,而不是更短.
对我来说,我仍然觉得"我有更多的CPU,因此,我应该能够更快地做到这一点",但我无法完全围绕证据或反证据证明这一点.我在C++中进行了相当多的实验,但我现在怀疑其他语言可能会为这项任务提供更好的解决方案(erlang?).思考?
编辑细节:我认为有几种经常使用的编程/数据结构范例可能会加速.例如,我发现自己经常编写基本上看起来像这样的代码(其中实际数据已被"rand()"替换)
static const int N = 1000000;
static const int M = 10000000; // 10x more lookups
hash_map<int, int> m;
// batch insert a bunch of interesting data
for (int i = 0; i < N; i++) m[rand()] = rand();
// Do some random access lookups.
for (int i = 0; i < M; i++) m[rand()]++;
Run Code Online (Sandbox Code Playgroud)
这种范例经常用于名称 - 值设置和配置数据,批处理等等.10x(或更多)查找/插入比率使传统的hash_map <>成为这种操作的理想选择.
这可以很容易地分成两半,具有插入阶段和查找阶段,并且在并行世界中,在两半之间可能存在一些"刷新队列"操作.交错插入+查找版本更难:
hash_map<int, int> m;
for (int i = 0; i < N; i++) {
if …Run Code Online (Sandbox Code Playgroud) 我想为Django的默认User类定义一个代理模型,有点像这样:
class MyUser(User):
def pretty_username(self):
if self.first_name:
return self.first_name
return self.username
class Meta:
proxy = True
Run Code Online (Sandbox Code Playgroud)
而且,我希望能够从视图代码中调用pretty_username(理想情况下,甚至可以从模板中调用).是否有一种简单的方法来获取标准用户模型的实例并将其类型转换为MyUser的实例?
__init__只要我可以说,即使是一些魔法对我也没关系
my_user = MyUser(request.user)
Run Code Online (Sandbox Code Playgroud)
在我的视图代码中.
假设一组简单的继承Model类,如下所示:
class BaseObject(models.Model):
some_field = models.SomeField(...)
class AwesomeObject(BaseObject):
awesome_field = models.AwesomeField(...)
class ExcellentObject(BaseObject):
excellent_field = models.ExcellentField(...)
Run Code Online (Sandbox Code Playgroud)
和一个如下所示的查询:
found_objects = BaseObject.objects.filter(some_field='bogus')
Run Code Online (Sandbox Code Playgroud)
获取每个found对象并将其转换为派生类的最佳方法是什么?我现在使用的代码是这样的:
for found in found_objects:
if hasattr(found, 'awesomeobject'):
ProcessAwesome(found.awesomeobject)
elif hasattr(found, 'excellentobject'):
ProcessExcellent(found.excellentobject):
Run Code Online (Sandbox Code Playgroud)
但是,感觉这是滥用"hasattr".有没有更好的方法来做到这一点,而不在基类上创建一个显式的"类型"字段?
这是我正在考虑使用的模式:
class Dicty(dict):
def __init__(self):
self.__dict__ = self
d = Dicty()
d.foo = 'bar'
print d['foo']
>>> bar
d['foo'] = 'baz'
print d.foo
>>> 'baz'
Run Code Online (Sandbox Code Playgroud)
一般来说,我更喜欢对象属性访问的语义而不是dict get/set访问,但是在某些情况下需要类似dict的访问(例如d['foo-bar'] = 'baz'),我宁愿不为这些情况使用特殊的getter setter方法,因此,dict和object同时具有共享属性的双重行为.
有上述模式的问题吗?
我正在寻找一个支持良好的多线程Python HTTP服务器,它支持分块编码回复.(即响应中的"转移编码:分块").为此目的,最好的HTTP服务器基础是什么?
是否有一个纯Python工具来获取一些HTML并将其截断尽可能接近给定长度,但是确保生成的片段格式正确吗?例如,给定此HTML:
<h1>This is a header</h1>
<p>This is a paragraph</p>
Run Code Online (Sandbox Code Playgroud)
它不会产生:
<h1>This is a hea
Run Code Online (Sandbox Code Playgroud)
但:
<h1>This is a header</h1>
Run Code Online (Sandbox Code Playgroud)
或至少:
<h1>This is a hea</h1>
Run Code Online (Sandbox Code Playgroud)
我找不到一个有效的,虽然我找到了一个依赖的pullparser,既过时又死了.
我有兴趣simplejson.loads()成功解析以下内容:
{foo:3}
Run Code Online (Sandbox Code Playgroud)
它抛出一句JSONDecodeError"期待财产名称",但实际上它说"我需要在我的财产名称周围加双引号".这对我的用例很烦人,我更喜欢不太严格的行为.我已经阅读了文档,但除了制作我自己的解码器类之外,我没有看到任何明显改变这种行为的东西.
我的视图代码基本上看起来像这样:
context = Context()
context['some_values'] = ['a', 'b', 'c', 'd', 'e', 'f']
context['other_values'] = [4, 8, 15, 16, 23, 42]
Run Code Online (Sandbox Code Playgroud)
我希望我的模板代码如下所示:
{% for some in some_values %}
{% with index as forloop.counter0 %}
{{ some }} : {{ other_values.index }} <br/>
{% endwith %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
我希望这会输出:
a : 4 <br/>
b : 8 <br/>
c : 15 <br/>
d : 16 <br/>
e : 23 <br/>
f : 42 <br/>
Run Code Online (Sandbox Code Playgroud)
这可能吗?我发现我的"with"语句实际上正在工作,但是然后使用该变量作为参考是行不通的.我怀疑对于{{other_values.index}}它正在做other_values ['index']而不是other_values [index].这可能吗?
我有一个看起来像这样的git别名:
[alias]
unpushed = log origin..HEAD --pretty=format:'%h %an %s'
Run Code Online (Sandbox Code Playgroud)
当我在掌握时,这对于显示"未按下"的变化非常有用.但是,当我在分支机构时,这个别名并不能正常工作.
无论我是否在分支上,正确的命令是什么才能显示未按下的更改?
我想始终确保我的馆藏被编入索引,并且我会在半定期的基础上添加和删除它们.
假设我在每次Web请求时都与DB建立了新连接,那么每次连接时都可以执行一些db.collection.ensureIndex({field:true})语句吗?
python ×6
django ×3
coding-style ×1
git ×1
git-log ×1
html ×1
http ×1
json ×1
mongodb ×1
simplejson ×1
truncation ×1