我使用的过滤器等中记载到结账时裂伤文件在这里.现在的问题是过滤器定义只存储在我的本地配置文件中:
$ cat .git/config
....
[filter "dater"]
smudge = /home/.../expand_date
clean = perl -pe \"s/\\\\\\$Date[^\\\\\\$]*\\\\\\$/\\\\\\$Date\\\\\\$/\"
Run Code Online (Sandbox Code Playgroud)
如果我的同事想要从这种Date
扩展中受益,他们需要复制我的过滤器定义.如果我改变它,我需要通知他们等等.
那么我可以将这个过滤器定义部分存储.git/config
在存储库中并让git使用它吗?
我在我的python应用程序中使用标准的python日志记录模块:
import logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger("log") while True: logger.debug('Stupid log message " + ' '.join([str(i) for i in range(20)]) ) # Do something
问题是,虽然调试级别不启用,那个愚蠢的日志消息是在每次循环迭代,这严重损害了性能评估.
这有什么解决方案吗?
在C++中,我们有log4cxx
一个提供这样的宏的包:
LOG4CXX_DEBUG(logger, messasage)
有效地评估为
if (log4cxx::debugEnabled(logger)) { log4cxx.log(logger,log4cxx::LOG4CXX_DEBUG, message) }
但是由于Python(AFAIK)中没有宏,是否有一种有效的记录方法?
我试图importlib.import_module
在Python 2.7.2中使用并遇到奇怪的错误.
考虑以下目录结构:
a | + - __init__.py - b | + - __init__.py - c.py
a/b/__init__.py
具有以下代码:
import importlib mod = importlib.import_module("c")
(在实际代码中"c"
有一个名字.)
试着import a.b
,产生以下错误:
>>> import a.b Traceback (most recent call last): File "", line 1, in File "a/b/__init__.py", line 3, in mod = importlib.import_module("c") File "/opt/Python-2.7.2/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named c
我错过了什么?
谢谢!
我有包p
有模块a
和b
.a
依赖于b
:
b.py
内容:
import a
Run Code Online (Sandbox Code Playgroud)
不过,我想确保的是b
进口我a
来自同一个模块p
包目录,不是任何a
的模块PYTHONPATH
.
所以我想改变b.py
如下:
from . import a
Run Code Online (Sandbox Code Playgroud)
只要b
我在p
包目录之外导入,这就可以工作.给出以下文件:
/tmp
/p
a.py
b.py
__init__.py
Run Code Online (Sandbox Code Playgroud)
以下作品:
$ cd /tmp
$ echo 'import p.b' | python
Run Code Online (Sandbox Code Playgroud)
以下不起作用:
$ cd /tmp/p
$ echo 'import b' | python
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "b.py", line 1, …
Run Code Online (Sandbox Code Playgroud) 我有简约的龙卷风应用程序:
import tornado.ioloop
import tornado.web
class PingHandler(tornado.web.RequestHandler):
def get(self):
self.write("pong\n")
if __name__ == "__main__":
application = tornado.web.Application([ ("/ping", PingHandler), ])
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)
Tornado不断向stderr报告错误请求:
WARNING:tornado.access:404 GET / (127.0.0.1) 0.79ms
Run Code Online (Sandbox Code Playgroud)
问题:它希望阻止它记录错误消息.怎么样?
龙卷风3.1版; Python 2.6
我有Apache
+ mod_wsgi
+ Django
应用程序.mod_wsgi
以守护进程模式运行.
我有一个视图从DB获取重要的查询集,另外通过计算查询集的结果来分配数组,然后返回此数组.我没有使用线程本地存储,全局变量或类似的东西.
问题是我的应用程序相对于我为mod_wsgi设置的数字线程占用内存.
我通过在mod_wsgi中设置不同数量的线程然后通过curl检查wsgi进程可以在多大程度上进行内存爬升来进行小型实验.
它是这样的:
1 thread - 256Mb 2 threads - 400Mb 3 threads - 535Mb 4 threads - 650Mb
因此每个线程添加大约120-140Mb到最高内存使用量.
我似乎永远不会释放为第一个请求分配的初始内存.在单线程场景中,当第二个请求(到同一视图)到达时,它会被重用.我可以离开.
但是当我使用多个线程时,当请求由之前从未运行此请求的线程处理时,此线程会在本地某处"保存"另一个140mb.
mod_wsgi
?谢谢.
PS.DEBUG
设置为False insettings.py
我有一个无限期生成输出的程序。我想对该输出进行一秒钟的采样,然后通过管道传输到 gzip 中。我正在使用timeout
util 来限制执行,但问题是它也gzip
被杀死了。
例如:
$ /usr/bin/timeout 1 bash -c "echo asdf; sleep 5" | gzip > /tmp/foo.gz; ls -lah /tmp/foo.gz
Terminated
-rw-rw-r-- 1 haizaar haizaar 0 Jul 22 15:05 /tmp/foo.gz
Run Code Online (Sandbox Code Playgroud)
你看,gzip 命令是Terminated
,因此它的输出结果是一个空文件(由于丢失的缓冲区)
我不明白如何timeout
设法杀死读取其标准输出的进程;以及如何修复它。
即使将整个事情包装在另一个bash
结果中也是一样的:
$ bash -c '/usr/bin/timeout 1 bash -c "echo asdf; sleep 5"' | gzip > /tmp/foo.gz; ls -lah /tmp/foo.gz
Terminated
-rw-rw-r-- 1 haizaar haizaar 0 Jul 22 15:30 /tmp/foo.gz
Run Code Online (Sandbox Code Playgroud)
我可以在前面加上timeout
用setsid
,然后它的工作原理这让我觉得它的主题相关的进程组混合起来却很难,目前的情况是“设计”接受这样的事实,因为它使timeout
命令非常棘手与壳牌管道使用。 …
我正在编写python包/模块,并希望日志消息提到它们来自哪个模块/类/函数.即如果我运行此代码:
import mymodule.utils.worker as worker w = worker.Worker() w.run()
我想记录消息如下:
2010-06-07 15:15:29 INFO mymodule.utils.worker.Worker.run <pid/threadid>: Hello from worker
我怎么能做到这一点?
谢谢.
我有以下带参数的装饰器:
from functools import wraps
def pdecor(p):
def decorator(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
p -= 1
return fn(*args, **wargs)
return wrapper
return decorator
Run Code Online (Sandbox Code Playgroud)
尝试使用装饰器导致:
>>> @pdecor(1)
... def run(): pass
...
>>> run()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in wrapper
UnboundLocalError: local variable 'p' referenced before assignment
>>>
Run Code Online (Sandbox Code Playgroud)
为什么我不能改变p
?
我有一个XML文档,其日期为标准ISO 8601格式.像这样:
2011-11-29T04:15:22-08:00
我想使用XSLT将时间转换为以下格式的UTC和输出日期:
2011-11-29 12:15:22
怎么做到呢?
提前致谢.
我有以下示例mappipng:
{ "book" : { "properties" : { "author" : { "type" : "string" }, "title" : { "type" : "string" }, "reviews" : { "properties" : { "url" : { "type" : "string" }, "score" : { "type" : "integer" } } }, "chapters" : { "include_in_root" : 1, "type" : "nested", "properties" : { "name" : { "type" : "string" } } } } } }
我想对评论数量进行分析 - 即"评论"数组的长度.例如,我需要的口头语言结果是:"100篇文章有10篇评论,20篇文档有5篇评论,......"
我正在尝试以下统计方面:
{ "query" : { "match_all" : {} }, …
我有一个我想要从中导入的模块名称列表__init__.py
。
$ mkdir /tmp/pkg
$ touch /tmp/__init__.py /tmp/pkg/{a.py,b.py}
$ cat /tmp/pkg/__init__.py
to_import = ["a", "b"]
import importlib
for toi in to_import:
importlib.import_module(toi)
$ cd /
$ python
>>> import tmp.pkg
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "tmp/pkg/__init__.py", line 5, in <module>
importlib.import_module(toi)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named a
>>>
Run Code Online (Sandbox Code Playgroud)
python 2.7.4 Ubuntu 64位
问题:那么如何从包中导入包模块__init__.py
?
我想通过Tornado流式传输长数据库结果集.我显然需要一个服务器游标,因为它不可能将整个查询加载到内存中.
所以我有以下代码:
class QueryStreamer(RequestHandler):
def get(self):
cursor.execute("Select * from ...")
chunk = cursor.fetch(1000)
while chunk:
self.write(chunk)
self.flush()
chunk = cursor.fetch(1000)
self.finish()
cursor.close()
Run Code Online (Sandbox Code Playgroud)
如果有人直到最后才读到我的请求?(即curl ... |head
),该get
方法很乐意将我的数据流式传输到任何地方.我希望SIGPIPE
在某些时候得到并关闭数据库游标(没有将它运行到最后没有任何结果).
如何在Tornado中捕获写入错误?
更新:根据答案中的建议我尝试了以下内容:
import tornado.ioloop
import tornado.web
import time
class PingHandler(tornado.web.RequestHandler):
def get(self):
for i in range(600):
self.write("pong\n")
self.flush()
time.sleep(1)
print "pong"
self.finish()
print "ponged"
def on_connection_close(self):
print "closed"
if __name__ == "__main__":
application = tornado.web.Application([ ("/ping", PingHandler), ])
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)
我在终端1和终端2中运行此文件我调用:
curl -s http://localhost:8888/ping
Run Code Online (Sandbox Code Playgroud)
在第一次回复后我点击了CTRL-C.但是在终端1中,我看到它很高兴地保持着"乒乓球",并且on_connection_close
永远不会被召唤.
底线 …