我最近偶然发现了在虚拟环境中运行覆盖率测量的一些问题.我不记得过去的类似问题,也无法在网上找到解决方案.
基本上,当我尝试在virtualenv中运行测试套件时,它工作正常.但是,尽管我尝试使用coverage它,但由于缺少所需的模块而失败.基于StackOverflow上的一些答案,我检查了我的脚本并发现它coverage使用不同的解释器,即使从内部运行也是如此virtualenv.
以下是如何重现它:
$ virtualenv --no-site-packages venv
New python executable in venv/bin/python
Installing Setuptools................................................done.
Installing Pip.......................................................done.
$ source venv/bin/activate
(venv)$ echo 'import sys; print(sys.executable)' > test.py
(venv)$ python test.py
/home/tadeck/testground/venv/bin/python
(venv)$ coverage run test.py
/usr/bin/python
Run Code Online (Sandbox Code Playgroud)
问题是:如何coverage无缝地使用虚拟环境?我可以在sys.path系统范围内更改或安装所需的模块,但必须采用更清洁的方式.
我有以下字符串,并希望使用str_replace或preg_replace删除括号但不确定如何.我已经能够使用str_replace删除左括号,但无法删除右括号.
这是刺痛:
$coords = '(51.50972493425563, -0.1323877295303646)';
Run Code Online (Sandbox Code Playgroud)
我试过了:
<?php echo str_replace('(','',$coords); ?>
Run Code Online (Sandbox Code Playgroud)
删除了开头括号,但我现在认为我需要preg_replace来删除它们.
怎么会这样呢?
帮助赞赏
我编写了一个"基于链"的Python API(类似于jQuery).所以我可以写:
myObject.doStuff().doMoreStuf().goRed().goBlue().die()
Run Code Online (Sandbox Code Playgroud)
问题是我没有找到一种方法来保持长链的语法清洁.在JavaScript中我可以做到
myOjbect
.doStuf()
.doMoreStuf()
.goRed()
.goBlue()
.die()
Run Code Online (Sandbox Code Playgroud)
但Python有缩进限制......
在尝试解决更复杂的问题时,我开始将访问速度与局部变量与成员变量进行比较.
这是一个测试程序:
#!/usr/bin/env python
MAX=40000000
class StressTestMember(object):
def __init__(self):
self.m = 0
def do_work(self):
self.m += 1
self.m *= 2
class StressTestLocal(object):
def __init__(self):
pass
def do_work(self):
m = 0
m += 1
m *= 2
# LOCAL access test
for i in range(MAX):
StressTestLocal().do_work()
# MEMBER access test
for i in range(MAX):
StressTestMember().do_work()
Run Code Online (Sandbox Code Playgroud)
我知道实例化StressTestMember和StressTestLocal每次迭代可能看起来不错,但在建模程序中这些基本上是Active Records是有意义的.
经过简单的基准测试,
本地版本的速度提高了大约33%,同时仍然是课程的一部分.为什么?
有些移动客户端提交时,有时这行Django应用程序(使用Apache/mod_wsgi托管)需要花费大量时间来执行(例如99%的请求处理,如New Relic所测量的6秒):
raw_body = request.body
Run Code Online (Sandbox Code Playgroud)
(request传入请求在哪里)
我有的问题:
request.body这么多的访问?Django的body属性HttpRequest是一个属性,所以它真正解决了那里真正做的事情,以及如果可能的话,如何在Django应用程序之外实现它.我希望Apache在将其发送到Django应用程序之前等待完整请求.
我有一些目录,包含大量文件.每当我尝试访问其中的文件列表时,我都无法做到这一点,或者有明显的延迟.我试图ls在Linux上的命令行中使用命令,而我的托管服务提供商的网络界面也没有帮助.
问题是,当我这样做ls时,甚至需要花费大量时间才能开始显示某些内容.因此,ls | wc -l也无济于事.
经过一些研究后,我想出了这个代码(在这个例子中,它计算了某些服务器上新电子邮件的数量):
print sum([len(files) for (root, dirs, files) in walk('/home/myname/Maildir/new')])
Run Code Online (Sandbox Code Playgroud)
上面的代码是用Python编写的.我使用了Python的命令行工具,它运行得非常快(立即返回结果).
我对以下问题的答案感兴趣:是否可以更快地计算目录(没有子目录)中的文件?最快的方法是什么?
嗯,我有现成的代码,我确信它确实有效,但我收到以下错误:
TypeError:描述符'split'需要'str'对象但收到'unicode'
这就是整个def:
def assemblePacket(self, type):
ipSplit = str.split(self.serverVars[0], '.')
packet = 'SAMP'
packet += chr(int(ipSplit[0]))
packet += chr(int(ipSplit[1]))
packet += chr(int(ipSplit[2]))
packet += chr(int(ipSplit[3]))
packet += chr(self.serverVars[1] & 0xFF)
packet += chr(self.serverVars[1] >> 8 & 0xFF)
packet += type
return packet
Run Code Online (Sandbox Code Playgroud)
这是问题所在:
ipSplit = str.split(self.serverVars[0], '.')
Run Code Online (Sandbox Code Playgroud)
我确定这不是因为代码,我之前尝试过(相同的脚本)并且它有效.不知道为什么它现在没有.这个"unicode"让我觉得我必须改变"str.split",但是嗯.等待意见:)
我能想到的唯一原因是计算ETag可能很昂贵.如果页面变化非常快,浏览器的缓存很可能会被无效ETag.在这种情况下,计算这ETag将浪费时间.另一方面,304在可能的情况下给出响应可以最小化传输所花费的时间.ETag当用Django实现时,CommonMiddleware什么时候可能成为净胜利者有什么好的指导方针?
Django默认在名为" id"的每个模型上创建一个主键字段,其类型为AutoField.在我的模型上,我UUIDField通过使用" primary_key"属性来覆盖它以使用自定义作为主键.我还希望User模型中django.contrib.auth有一个UUIDField作为主键,但如果不更改User模型源代码,这似乎是不可能的.
有没有推荐的方法来解决这个问题?
我想知道jQuery是否可以做这样的事情还是有其他方法来做到这一点?
$(".row_c:last|.row_d:last").css("color","red");
Run Code Online (Sandbox Code Playgroud)
我有交替的行,我想找到最后一行,它是row_c或row_d但是catch是row_c或row_d插入另一组交替行row_a和row_b之间,以便说明:
要么
我们可以使用| 或jQuery中的运算符?还是有类似的东西?
python ×7
django ×3
performance ×3
apache ×1
benchmarking ×1
caching ×1
coverage.py ×1
etag ×1
http ×1
javascript ×1
jquery ×1
linux ×1
ls ×1
php ×1
preg-replace ×1
request ×1
str-replace ×1
string ×1
virtualenv ×1