小编Zaa*_*Hai的帖子

将git config存储为存储库的一部分

我使用的过滤器等中记载到结账时裂伤文件在这里.现在的问题是过滤器定义只存储在我的本地配置文件中:

$ 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使用它吗?

git

134
推荐指数
2
解决办法
4万
查看次数

懒惰记录器消息字符串评估

我在我的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)中没有宏,是否有一种有效的记录方法?

python logging

61
推荐指数
4
解决办法
2万
查看次数

如何使用importlib.import_module在Python中导入模块

我试图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

我错过了什么?

谢谢!

python import module python-importlib

57
推荐指数
3
解决办法
8万
查看次数

强制从当前目录导入模块

我有包p有模块ab.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)

python

17
推荐指数
2
解决办法
3万
查看次数

Python Tornado - 禁用日志记录到stderr

我有简约的龙卷风应用程序:

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

python tornado

8
推荐指数
3
解决办法
7090
查看次数

为什么Python不释放内存(在mod_wsgi + Django下)

我有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.

  • 怎么解决这个问题?
  • 可能Django会在TSL中保存一些数据.如果是这种情况,我该如何禁用它?
  • 或者,作为一种解决方法,是否可以将请求执行绑定到某个线程mod_wsgi

谢谢.

PS.DEBUG设置为False insettings.py

python django memory-leaks mod-wsgi

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

为什么 /usr/bin/timeout 会杀死整个管道?

我有一个无限期生成输出的程序。我想对该输出进行一秒钟的采样,然后通过管道传输到 gzip 中。我正在使用timeoututil 来限制执行,但问题是它也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)

我可以在前面加上timeoutsetsid,然后它的工作原理这让我觉得它的主题相关的进程组混合起来却很难,目前的情况是“设计”接受这样的事实,因为它使timeout命令非常棘手与壳牌管道使用。 …

linux bash shell

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

python中的记录器链

我正在编写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

我怎么能做到这一点?

谢谢.

python logging

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

python装饰器中变量的范围 - 更改参数

我有以下带参数的装饰器:

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

python decorator

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

使用XSLT将dateand以XML格式转换为UTC时区

我有一个XML文档,其日期为标准ISO 8601格式.像这样:


2011-11-29T04:15:22-08:00

我想使用XSLT将时间转换为以下格式的UTC和输出日期:


2011-11-29 12:15:22

怎么做到呢?

提前致谢.

xml xslt

3
推荐指数
1
解决办法
1万
查看次数

ElasticSerach - 列表长度的统计方面

我有以下示例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" : {}
    }, …

elasticsearch

3
推荐指数
1
解决办法
1362
查看次数

如何从包的 __init__.py 导入包模块?

我有一个我想要从中导入的模块名称列表__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

python python-import python-2.7

3
推荐指数
1
解决办法
3767
查看次数

如何捕捉python-tornado中的写入中止?

我想通过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永远不会被召唤.

底线 …

python tornado

2
推荐指数
1
解决办法
831
查看次数