小编Ric*_*eur的帖子

您在Google App Engine上开发的经验是什么?

GQL是否易于为了解SQL的人学习?Django/Python怎么样?App Engine是否真的能够轻松扩展?是否有针对"GQL注入"的内置保护?等等...

我很想听到使用app引擎的不那么明显的起伏.

干杯!

google-app-engine gql

7
推荐指数
2
解决办法
2949
查看次数

是否定义了Python的bool排序?

在Python中定义True和False的顺序,还是作为实现细节保留?

从控制台,我在True之前看到False排序......但我不知道这是否是我应该依赖的行为.

(我确定有一些关于这个的Python文档,但我找不到它......)

python sorting undefined-behavior

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

Python 中的 cx_Oracle、生成器和线程

当连接对象被不同线程使用时,cx_Oracle 游标的行为是什么?生成器将如何影响这种行为?具体来说...

编辑:原来的示例函数不正确;生成器由子函数返回,yield未直接在循环中使用。这澄清finally了何时执行(在return执行之后),但仍然没有回答如果另一个线程开始使用创建游标的连接对象,是否可以使用游标。它实际上似乎(至少在 python 2.4 中)try...finallyyield导致语法错误。

def Get()
  conn = pool.get()
  try:
    cursor = conn.cursor()
    cursor.execute("select * from table ...")
    return IterRows(cursor)
  finally:
    pool.put(conn)

def IterRows(cursor):
  for r in cursor:
    yield r
Run Code Online (Sandbox Code Playgroud)

Get()是一个被多个线程调用的函数。连接是通过threaded=False参数创建的。

我在想...

  1. cursor如果线程 2 出现并使用相同的连接对象,线程 1 的对象是否仍然可用?如果没有,可能会发生什么?

我看到的行为是 cx_Oracle 中谈论协议错误的异常,然后出现段错误。

python multithreading cx-oracle yield generator

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

扩展Python队列的正确方法?

我正在编写Queue.Queue的自定义子类,并遇到需要put()在调用自定义时获取队列级锁定的情况.我想重用现有的锁Queue has(Queue.mutex),但不能因为它不是一个RLock.

在源代码(python 2.6)中,它说:

# Override these methods [_put, _get, etc] to implement other queue organizations
# (e.g. stack or priority queue).
# These will only be called with appropriate locks held
Run Code Online (Sandbox Code Playgroud)

但是在线文档没有提到覆盖它们.该模块中的其他Queue实现会覆盖这些.所以,我有点倾向于认为这个_put方法是包私有的,并不是真的打算在Queue模块之外使用.

有谁知道Queue._put在我自己的子类中使用和朋友是多么的犹太人?

python queue

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

什么时候不同步读/写变量是安全的?

在Java中,什么时候可以"逃避"不使用synchronized对多个并发线程进行读/写的变量?

我读到了一些令人惊讶的并发错误:双重检查锁定散列映射,并且在共享读/写情况下默认情况下始终使用同步,但是,我开始怀疑什么时候不行.

例如,我可以用什么样的一般规则来决定时,它的真正安全的忽略synchronized从这样的方法:

T getFoo() {
  if (this.foo == null) {
    this.foo = createFoo() // createFoo is always thread safe.
  }
  return this.foo;
}
Run Code Online (Sandbox Code Playgroud)

哪里:

  • T 可能是原始或任意对象
  • createFoo 始终是线程安全的,可以多次调用,但是未指定.
  • getFoo() 可以"最终保持一致".

如果T是原始的,那可以int吗?怎么样Integer?像String这样的简单对象呢?等等.

java concurrency jvm

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

使用finally子句的try块中不允许使用python 2.4的产生方法

我坚持使用python2.4,所以我不能使用带有生成器的finally子句yield.有什么方法可以解决这个问题吗?

我找不到如何在python 2.4中解决这个限制的任何提及,我不是我想到的解决方法(主要涉及__del__并试图确保它在合理的时间内运行)的忠实粉丝不太吸引人.

python yield python-2.4 try-finally

4
推荐指数
1
解决办法
3657
查看次数

递归生成器和send()

有没有人知道send()在递归使用时如何与生成器一起工作?我希望将值传递给当前的生成器,然后可以将其传递给递归生成器......但似乎情况并非如此?一些示例代码:

def Walk(obj):
  recurse = (yield obj)
  if not recurse:
    print 'stop recurse:', recurse
    return

  if isinstance(obj, list):
    print 'is list:', obj
    for item in obj:
      print 'item loop:', item
      walker = Walk(item)
      for x in walker:
        print 'item walk:', x
        recurse = (yield x)
        print 'item walk recurse:', recurse
        walker.send(recurse)

root = ['a', ['b.0', ['b.0.0']]]

walker = Walk(root)
for i, x in enumerate(walker):
  print i, x
  print 'send true'
  walker.send(True)
Run Code Online (Sandbox Code Playgroud)

所需的输出应该是每个级别递归的每个值:

0 ['a', ['b.0', ['b.0.0']]]
1 'a'
2 ['b.0', …
Run Code Online (Sandbox Code Playgroud)

python recursion generator

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

如何使用列表理解走上链表?

我一直试图想出一种使用列表表达式遍历层次结构的方法,比如链表,但是没有提出任何看似有用的东西.

基本上,我想转换这段代码:

p = self.parent
names = []
while p:
  names.append(p.name)
  p = p.parent
print ".".join(names)
Run Code Online (Sandbox Code Playgroud)

变成单线像:

print ".".join( [o.name for o in <???>] )
Run Code Online (Sandbox Code Playgroud)

但是,我不确定如何以通用的方式进行???部分遍历(如果它甚至可能).我有几个具有相似类型属性的结构,并且不希望为每个结构编写一个屈服函数..parent

编辑:

我不能使用__iter__对象本身的方法,因为它已经用于迭代对象本身包含的值.大多数其他答案,除了liori的,硬编码属性名称,这是我想要避免的.

根据liori的回答,这是我的改编:

import operator
def walk(attr, start):
  if callable(attr):
    getter = attr
  else:
    getter = operator.attrgetter(attr)

  o = getter(start)
  while o:
    yield o
    o = getter(o)
Run Code Online (Sandbox Code Playgroud)

python list-comprehension

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

按对象的类型排序

我有代码(type, handler_function)在模块加载时静态注册对,导致这样的字典:

HANDLERS = {
  str: HandleStr,
  int: HandleInt,
  ParentClass: HandleCustomParent,
  ChildClass: HandleCustomChild
  }

def HandleObject(obj):
  for data_type in sorted(HANDLERS.keys(), ???):
    if isinstance(obj, data_type):
      HANDLERS[data_type](obj)
Run Code Online (Sandbox Code Playgroud)

ChildClass从哪里继承ParentClass.问题是,由于它是一个字典,订单没有定义 - 但我如何内省类型对象来找出一个排序键

生成的顺序应该是超类的子类(首先是大多数特定类型).例如,str之前basestringChildClass之前ParentClass.如果类型不相关,那么它们相对于彼此的位置并不重要.

python sorting

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