小编Kur*_*urt的帖子

枚举或列出[您最喜欢的语言]程序中的所有变量

一位朋友上周问我如何枚举或列出程序/函数/等中的所有变量.出于调试的目的(基本上获取所有内容的快照,以便您可以查看设置了哪些变量,或者是否设置了它们).我环顾四周,找到了一个比较好的Python方法:

#!/usr/bin/python                                                                                                                                                                                                                           
foo1 = "Hello world"
foo2 = "bar"
foo3 = {"1":"a",
        "2":"b"}
foo4 = "1+1"

for name in dir():
    myvalue = eval(name)
    print name, "is", type(name), "and is equal to ", myvalue

这将输出如下内容:

__builtins__ is <type 'str'> and is equal to  <module '__builtin__' (built-in)>
__doc__ is <type 'str'> and is equal to  None
__file__ is <type 'str'> and is equal to  ./foo.py
__name__ is <type 'str'> and is equal to  __main__
foo1 is <type 'str'> and is equal to …

variables debugging enumeration

77
推荐指数
8
解决办法
5万
查看次数

Python全局解释器锁(GIL)解决方案在Linux上使用taskset的多核系统?

所以我刚刚在Python全局解释器锁(GIL)http://blip.tv/file/2232410上看完了这个演讲.

它的要点是GIL对于单核系统来说是一个非常好的设计(Python实际上将线程处理/调度留给了操作系统).但是,这可能严重地适应多核系统,最终导致IO密集型线程被CPU密集型线程严重阻塞,上下文切换费用,ctrl-C问题[*]等等.

因此,由于GIL限制我们基本上在一个CPU上执行Python程序,我的想法是为什么不接受这个并简单地在Linux上使用taskset来设置程序与系统上某个核心/ cpu的亲和性(特别是在某种情况下)在多核系统上运行的多个Python应用程序)?

所以最终我的问题是:有没有人尝试在Linux上使用带有Python应用程序的任务集(特别是在Linux系统上运行多个应用程序,以便多个核心可以与一个或两个绑定到特定核心的Python应用程序一起使用),如果是这样的话是结果?值得做吗?是否会使某些工作负载更糟糕?我打算这样做并进行测试(基本上看看程序是否需要花费更多或更少的时间来运行),但我很乐意听取其他人的经验.

另外:David Beazley(在链接视频中发表演讲的人)指出,一些C/C++扩展手动释放GIL锁,如果这些扩展针对多核进行优化(即科学或数字数据分析/等),那么而不是为数字运算获得多核的好处,扩展将被有效地削弱,因为它仅限于单个核心(因此可能显着降低程序速度).另一方面,如果您没有使用此类扩展

我没有使用多处理模块的原因是(在这种情况下)程序的一部分是严重的网络I/O绑定(HTTP请求),所以有一个工作线程池是一个很好的方式从一个盒子挤出性能一个线程触发一个HTTP请求,然后因为它在I/O上等待就放弃了GIL而另一个线程可以做到这一点,所以程序的一部分可以轻松地运行100多个线程而不会伤害CPU太多让我实际使用可用的网络带宽.对于无堆栈的Python/etc,我对重写程序或替换我的Python堆栈并不过分感兴趣(可用性也是一个问题).

[*]只有主线程可以接收信号,所以如果你发送一个ctrl-C,Python解释器基本上试图让主线程运行,这样它就可以处理信号,但因为它不能直接控制运行哪个线程(它留给操作系统)它基本上告诉操作系统继续切换线程,直到它最终命中主线程(如果你不幸,可能需要一段时间).

python multithreading multicore gil python-stackless

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

哪个关键:与Python一起使用的值存储?

所以,我期待在不同的键:值(其中值是严格意义上的单值或可能的对象)用于存储和Python的使用,并已发现了一些有前途的.我还没有具体要求,因为我处于评估阶段.我正在寻找什么是好的,什么是坏的,这些东西处理得好或不合适的角落情况等等.我相信你们中的一些人已经尝试过它们所以我很想听听你们的发现/问题/等等.在各种关键:使用Python的值存储.我主要看的是:

memcached - http://www.danga.com/memcached/ python客户端:http ://pypi.python.org/pypi/python-memcached/1.40 http://www.tummy.com/Community/software/python- memcached的/

CouchDB - http://couchdb.apache.org/ python客户端:http://code.google.com/p/couchdb-python/

东京暴君 - http://1978th.net/tokyotyrant/ python客户:http://code.google.com/p/pytyrant/

Lightcloud - http://opensource.plurk.com/LightCloud/基于东京暴君,用Python编写

Redis - http://redis.io/ python客户端:http://pypi.python.org/pypi/txredis/0.1.1

MemcacheDB - http://memcachedb.org/

所以我开始基准测试(简单地插入键并读取它们),使用简单的计数生成数字键和值"短文本字符串":

memcached:CentOS 5.3/python-2.4.3-24.el5_3.6,libevent 1.4.12-stable,memcached 1.4.2,默认设置,1 gig内存,每秒14,000次插入,16,000秒读取.没有真正的优化,很好.

memcachedb声称每秒17,000到23,000次插入,每秒44,000到64,000次读取.

我也想知道其他人如何加快速度.

python memcached couchdb tokyo-tyrant

12
推荐指数
1
解决办法
9603
查看次数