我有http://example.com/depict?smiles=CO&width=200&height=200(以及其他几个可选参数)等网址
我的urls.py包含:
urlpatterns = patterns('',
(r'^$', 'cansmi.index'),
(r'^cansmi$', 'cansmi.cansmi'),
url(r'^depict$', cyclops.django.depict, name="cyclops-depict"),
Run Code Online (Sandbox Code Playgroud)
我可以转到该URL并获得构建的200x200 PNG,因此我知道该部分有效.
在我的"cansmi.cansmi"响应的模板中,我想给出一些查询参数的命名模板"cyclops-depict"的URL.我以为我能做到
{%url cyclops-depict smiles = input_smiles width = 200 height = 200%}
其中"input_smiles"是通过表单提交输入模板的.在这种情况下,它是字符串"CO",我认为它将创建一个类似于顶部的URL.
此模板因TemplateSyntaxError而失败:
在渲染时捕获异常:反向'cyclops-depict',带参数'()'和关键字参数'{'smiles':u'CO','height':200,'width':200}'未找到.
这是StackOverflow和其他地方的一个相当常见的错误消息.在我发现的每种情况下,人们都在URL路径regexp中使用带参数的情况,这与参数进入查询的情况不同.
这意味着我做错了.我该怎么做?也就是说,我想使用模板中的内容构造完整的URL,包括路径和查询参数.
以供参考,
% python manage.py shell
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.core.urlresolvers import reverse
>>> reverse("cyclops-depict", kwargs=dict())
'/depict'
>>> reverse("cyclops-depict", kwargs=dict(smiles="CO"))
Traceback (most recent call last): …Run Code Online (Sandbox Code Playgroud) 我正在研究一些以Apache的MPM prefork服务器为模型的Python代码.我是一名应用程序员而不是网络程序员,自从我读Stevens已经10年了,所以我正努力加快理解代码.
我找到了Sander Temme对Apache的prefork代码如何工作的简短描述.
父进程通常以root身份运行,绑定到套接字(通常是端口80或443).它生成子进程,继承了套接字的打开文件描述符,并将uid和gid更改为非特权用户和组.子节点构造一个侦听器文件描述符的轮询集(如果有多个侦听器)并监视它/它们上的活动.如果找到活动,则子活动在活动套接字上调用accept()并处理连接.完成后,它返回观察pollset(或监听器文件描述符).
由于多个子节点处于活动状态并且它们都继承了相同的套接字文件描述符,因此它们将观察相同的轮询集.接受互斥锁只允许一个孩子实际观察轮询集,一旦找到一个活动套接字,它将解锁互斥锁,以便下一个孩子可以开始观看轮询集.如果只有一个侦听器,则不使用接受互斥锁,并且所有子节点都将挂起在accept()中.
这几乎就是我正在寻找的代码的工作方式,但我不了解一些事情.
1)"孩子"和"听众"之间有什么区别?我认为每个孩子都是一个倾听者,这对我正在看的代码都是如此,但在Temme的描述中,可以有"单个听众"和"孩子".孩子什么时候会有多个听众?
2)(与1相关)这是一个进程互斥锁还是系统互斥锁?就此而言,为什么要使用互斥锁?不接受(2)在所有听众中做自己的互斥量?我的研究表明我确实需要一个互斥锁,并且互斥锁必须跨越整个系统.(羊群,信号量等)
特梅继续说:
儿童在上次提出请求时记录在共享内存区域(记分板)中.空进程可能会被父进程杀死以满足MaxSpareServers.如果太少的孩子闲置,父母将产生孩子以满足MinSpareServers.
3)这个实现是否有一个很好的参考代码(最好是在Python中)?我找到了Perl的Net :: Server :: Prefork,它为记分板使用管道而不是共享内存.我发现了一篇文章兰德尔·施瓦茨只做了preforking但没有做的记分牌.
来自Perl Cookbook的pre-fork示例没有任何关于select的锁定,Chris Siebenmann的Python示例说它基于Apache但是使用成对的套接字用于记分板,而不是共享内存,并使用套接字进行控制,包括控制给定的孩子'a'ccept.这根本不符合Apache描述.
在我对Apache许可下分发的免费软件包的评论中,我发现了一些错误,从模糊的代码问题到安全漏洞.
我采取了以下步骤:
我有一本字典
dic = {'s_good': 23, 's_bad': 39, 'good_s': 34}
Run Code Online (Sandbox Code Playgroud)
我想删除所有以's_'开头的键
所以在这种情况下,前两个将被删除.
有没有有效的方法呢?
我有大约10,000个单词用作一组反向索引到大约500,000个文档.两者都被规范化,因此索引是整数(单词id)到一组整数(包含单词的文档的id)的映射.
我的原型使用Python的集合作为明显的数据类型.
当我搜索文档时,我找到了N个搜索词及其相应的N组的列表.我想在这N组的交集中返回一组文档.
Python的"交叉"方法实现为成对缩减.我想我可以通过并行搜索排序集来做得更好,只要该库提供了一种快速的方法来获取i之后的下一个条目.
我一直在寻找类似的东西.几年前我写过PyJudy,但我不再保留它了,我知道要把它带到一个我再次感到舒服的阶段需要做多少工作.我宁愿使用别人经过良好测试的代码,我想要一个支持快速序列化/反序列化的代码.
我找不到任何,或者至少没有任何Python绑定.有一个avltree可以做我想要的,但是因为即使是成对的集合合并需要比我想要的更长的时间,我怀疑我想要用C/C++完成所有的操作.
你知道编写为Python的C/C++扩展的任何radix/patricia/critbit树库吗?
如果不这样,我应该包装哪个最合适的库?在朱迪矩阵网站还没有6年被更新,并且在2007年5月发布的1.0.5(虽然它打造干净所以也许它只是工作.)
(编辑:为了澄清我在API中寻找的东西,我想要的是:
def merge(document_sets):
probe_i = 0
probe_set = document_sets[probe_i]
document_id = GET_FIRST(probe_set)
while IS_VALID(document_id):
# See if the document is present in all sets
for i in range(1, len(document_sets)):
# dynamically adapt to favor the least matching set
target_i = (i + probe_i) % len(document_sets)
target = document_sets[target_i]
if document_id not in target_set:
probe_i = target_id
probe_set = document_sets[probe_i]
document_id = GET_NEXT(probe_set, document_id)
break …Run Code Online (Sandbox Code Playgroud) 我有Python代码与C++库交谈,它只接受文件名.我希望它从stdin读取.在Unix机器上我可以使用"/ dev/stdin".我以为我可以在Windows上使用特殊的"CON"设备,但更像是/ dev/tty,因为"echo something | my_program"不起作用.
在Windows下支持管道并不重要,但现在我很好奇.那个操作系统有文件名"/ dev/stdin"吗?
我有一个Python扩展,它使用特定于CPU的功能(如果可用).这是通过运行时检查完成的.如果硬件支持POPCNT指令,那么它选择我的内部循环的一个实现,如果SSSE3可用,那么它选择另一个,否则它回退到我的性能关键内核的通用版本.(在这个内核中花费了95%以上的时间.)
不幸的是,有一种我没想到的失败模式.我使用-mssse3和-O3来编译所有C代码,即使只有一个文件需要-mssse3选项.
结果,编译其他文件时期望SSSE3存在.这会导致线路出现段错误
start_target_popcount = (int)(query_popcount * threshold);
Run Code Online (Sandbox Code Playgroud)
因为编译器使用的是fisttpl,这是一个SSSE-3指令.毕竟,我告诉它假设ssse3存在.
我的软件包的Debian打包器最近遇到了这个问题,因为测试机器有一个gcc,它理解-mssse3并生成代码,但是机器本身有一个没有这些指令的旧CPU.
我想要一个解决方案,其中相同的二进制文件可以在较旧的机器和较新的机器上工作,Debian维护者可以用于该发行版.
理想情况下,我想说只使用-mssse3选项编译一个文件.由于我的CPU特定选择器代码不是此文件的一部分,因此除非CPU支持,否则不会执行SSSE-3代码.
但是,我无法想办法告诉distutils一组编译器选项是特定于单个文件的.
这甚至可能吗?
我正在寻找一个非传统文本搜索的文本搜索引擎,我想知道哪种工具(Lucene,Sphinx,Xapian或其他)最适合我,以及从哪里开始的指示.
我有分子表示为图(原子和键).我有办法枚举大小为k的所有子图.作为技术,输入是SMILES,输出是规范的SMARTS和每个子图/ SMARTS出现的次数.
例如,如果输入分子是" CCO ",那么规范结果是{"C":2,"O":1,"CC":1,"OC":1,"CCO":1}并且如果分子是" SCO ",则规范结果是{"C":1,"S":1,"O":1,"CS":1,"OC":1,"SCO":1}.这些都是很小的例子.对于真正的分子,我得到了大约500个"单词",看起来像"CC(C)O","CCCOCC","cn"和"cccc(c)O".
将分子视为特征字符串加上计数的集合意味着我应该能够使用文本搜索工具在文本级别进行比较,希望它们在化学级别上有意义.
举例来说,我可以使用余弦相似度或者tf-idf权重,并通过寻找类似的子模式找到类似的分子.通过上面的"CCO"和"SCO"示例,余弦相似度为(2*1 + 1*1 + 1*1)/ sqrt(2*2 + 1*1 + 1*1 + 1*1 + 1*1)/ sqrt(6*(1*1))= 4/sqrt(8*6)= 0.58.
再举一个例子,如果我想找到含有"CCS"亚结构的分子,那么我可以根据计数进行快速反向索引搜索(分子必须至少有2个"C",至少1个"CS",在解决NP子图的同构问题之前.也就是说,基于文本的方法可以充当过滤器以拒绝明显的不匹配.
我试图弄清楚存在的文本解决方案,但它有点令人生畏.我不需要停词,我不需要词干,我不在乎词序; 我不需要存在很多功能.我确实需要保留单词向量的能力,因为知道"C"是出现2次还是3次是很重要的.
哪个文本搜索引擎最适合我?它看起来像Lucene,特别是在Mahout的工作.您能否推荐一下文档的哪些部分或相关的教程?我发现的那些是用于全文搜索,具有词干和我不需要的其他功能.
我有一个基于paste.httpserver的Web服务器作为HTTP和WSGI之间的适配器.当我使用httperf进行性能测量时,如果每次使用--num-conn我开始一个新请求,我每秒可以执行超过1,000个请求.如果我改为使用--num-call重用连接,那么我每秒得到大约11个请求,速度的1/100.
如果我尝试ab,我会超时.
我的测试是
% ./httperf --server localhost --port 8080 --num-conn 100
...
Request rate: 1320.4 req/s (0.8 ms/req)
...
Run Code Online (Sandbox Code Playgroud)
和
% ./httperf --server localhost --port 8080 --num-call 100
...
Request rate: 11.2 req/s (89.4 ms/req)
...
Run Code Online (Sandbox Code Playgroud)
这是一个简单的可重现服务器
from paste import httpserver
def echo_app(environ, start_response):
n = 10000
start_response("200 Ok", [("Content-Type", "text/plain"),
("Content-Length", str(n))])
return ["*" * n]
httpserver.serve(echo_app, protocol_version="HTTP/1.1")
Run Code Online (Sandbox Code Playgroud)
它是一个多线程服务器,很难分析.这是一个单线程的变体:
from paste import httpserver
class MyHandler(httpserver.WSGIHandler):
sys_version = None
server_version = "MyServer/0.0"
protocol_version = "HTTP/1.1"
def log_request(self, *args, **kwargs):
pass …Run Code Online (Sandbox Code Playgroud) python ×4
dictionary ×1
disclosure ×1
distutils ×1
django ×1
graph ×1
httperf ×1
httpserver ×1
keep-alive ×1
locking ×1
lucene ×1
paste ×1
preforking ×1
query-string ×1
reverse ×1
security ×1
sphinx ×1
stdin ×1
text-search ×1
url ×1
windows ×1