我正在玩gevent,我试图理解为什么我的代码阻塞以及我如何解决它.
我有一个greenlets池,每个都与一个thrift客户端交谈,它从远程thrift服务器收集数据.出于练习的目的,thrift服务器总是采用> 1秒来返回任何数据.当我生成greenlets并运行join时,它们并不是全部并行执行,而是一个接一个地执行.我的理解是,这种情况正在发生,因为我的代码是"阻塞",因为当我运行时monkey.patch_all(),所有的greenlets都会神奇地并行运行.
那么我如何使代码非阻塞自己而不是猴子修补一切而不理解它在做什么?
这里有一个我不明白的例子:
import time
from gevent.pool import Pool
def hello():
print 'Hello %d' % time.time()
time.sleep(1)
def main():
pool = Pool(5)
for _ in xrange(5):
pool.spawn(hello)
pool.join()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
产量
Hello 1345477112
Hello 1345477113
Hello 1345477114
Hello 1345477115
Hello 1345477116
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用gevent.sleep,但如何使用常规time.sleep使该功能无阻塞?
谢谢
每当我在这台Mac OS机器上运行brew命令时,我都会收到以下错误
> brew doctor
/usr/local/Library/Homebrew/macos.rb:251:in `require': no such file to load -- macos/xcode (LoadError)
from /usr/local/Library/Homebrew/macos.rb:251
from /usr/local/Library/Homebrew/utils.rb:3:in `require'
from /usr/local/Library/Homebrew/utils.rb:3
from /usr/local/Library/Homebrew/global.rb:7:in `require'
from /usr/local/Library/Homebrew/global.rb:7
from /usr/local/bin/brew:17:in `require'
from /usr/local/bin/brew:17
Run Code Online (Sandbox Code Playgroud)
我拥有网络提供的一切.任何帮助表示赞赏.
我整天都在苦苦挣扎,真正了解如何使用buildout和pip.观看了一堆视频等,但我仍然很难搞清楚做什么和不做扩展和点子.
欢迎提供任何帮助,教程和书籍.
我正在尝试完全切换到buildout - 但我们的开发环境已经安装了很多东西 /usr/lib/pythonxx/
我怎样才能确保buildout不使用系统上已安装的库 - 最终没有virtualenv?
例如 - 如何避免这种行为?:
> cat buildout.cfg
[buildout]
parts = django
[django]
recipe = zc.recipe.egg
eggs = django
interpreter = django
>bin/django
>>> import django
>>> django
<module 'django' from '/usr/lib/python2.6/site-packages/django/__init__.pyc'>
>>>
Run Code Online (Sandbox Code Playgroud)
无论如何强制buildout不使用/usr/lib/python2.6中安装的鸡蛋?
这是维基百科上有关BST的一些代码:
# 'node' refers to the parent-node in this case
def search_binary_tree(node, key):
if node is None:
return None # key not found
if key < node.key:
return search_binary_tree(node.leftChild, key)
elif key > node.key:
return search_binary_tree(node.rightChild, key)
else: # key is equal to node key
return node.value # found key
Run Code Online (Sandbox Code Playgroud)
现在这是一个二叉树:
10
5 12
3 8 9 14
4 11
Run Code Online (Sandbox Code Playgroud)
如果我正在搜索11,并且我在那里遵循算法,我从10开始,我右转到12,然后离开到9.然后我到达树的末端而没有找到11.但是我的树中存在11 ,它只是在另一边.
你能解释一下二叉树中这个算法在树上工作的限制吗?
谢谢.
使用AppEngine获取最新插入对象的最佳方法是什么?我知道在Django中可以使用
MyObject.objects.latest()
Run Code Online (Sandbox Code Playgroud)
在AppEngine中,我希望能够做到这一点
class MyObject(db.Model):
time = db.DateTimeProperty(auto_now_add=True)
# Return latest entry from MyObject.
MyObject.all().latest()
Run Code Online (Sandbox Code Playgroud)
任何的想法 ?
说我有一个正则表达式
REGEX = re.compile('.*foo{')
Run Code Online (Sandbox Code Playgroud)
您将如何编写与python 2.4匹配的一组字符串的单元测试?
我知道在python 2.7中我可以使用assertRegexMatches,不幸的是,这在2.4中不起作用:/
我在其余的测试中使用self.assertEqual。
M,干杯
我正在使用mr.developer从mercurial存储库中检出我的包,但是我必须做错了,因为我遇到了嵌套依赖项的问题.
例如,如果我有foo以下内容
[buildout]
develop = .
extensions = mr.developer
sources = sources
auto-checkout =
pack1
parts = foo
[sources]
pack1 = hg http://blah.com/hg/pack1
Run Code Online (Sandbox Code Playgroud)
foo 依赖于pack1,在setup.py中列为 install_requires = ['pack1'],
当我运行时bin/buildout,一切顺利,mr.developer下载pack1,并且因为pack1已被下载而foo被创建没有问题,因此存在.
现在,我有另一个包,bar,它将foo列为依赖项.
[buildout]
develop = .
extensions = mr.developer
sources = sources
auto-checkout =
foo
parts = bar
[sources]
foo = hg http://blah.com/hg/foo
Run Code Online (Sandbox Code Playgroud)
我还将foo列为我的setup.py中的依赖项.install_requires = ['foo'],
现在发生的事情是我不理解的部分.
当我运行时bin/buildout,mr.developer去获取foo,但是没有接缝来执行位于foo /内部的buildout.cfg.因此,foo/setup.py需要pack1,它不存在.
如何确保mr.developer实际上在http://blah.com/hg/pack上获取pack1, 如图所示foo/buildout.cfg?
我希望能够嵌套这样的多个包,而无需深入到每个包中并手动运行buildout.
干杯,马丁
python ×6
buildout ×3
django ×2
virtualenv ×2
algorithm ×1
binary-tree ×1
gevent ×1
homebrew ×1
macos ×1
nonblocking ×1
pip ×1
ruby ×1
unit-testing ×1