哪些框架/库是构建现代多用户Web应用程序的最佳选择?我希望有一个异步的网络服务器,这将允许我轻松扩展.什么解决方案将提供最佳性能/可扩展性/最有用的框架(在易用性和易于开发方面)?
如果它能提供良好的功能(websockets,rpc,streaming等)会很棒.
每种解决方案的优缺点是什么?
我是gevents和greenlets的新手.我找到了一些关于如何使用它们的好文档,但是没有一个能让我证明我应该如何以及何时使用greenlets!
我不确定的是,如果它们基本上是共同惯例,它们如何为我们提供并发性.
我怎样才能在Python中表示一个字节数组(比如带有byte []的Java)?我需要用gevent通过电线发送它.
byte key[] = {0x13, 0x00, 0x00, 0x00, 0x08, 0x00};
Run Code Online (Sandbox Code Playgroud) 我正在使用py.test运行一组测试.他们过去了.开心辞典!但我收到这条消息:
Exception KeyError: KeyError(4427427920,) in <module 'threading' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.pyc'> ignored
Run Code Online (Sandbox Code Playgroud)
我应该如何追查其来源?(我不是直接使用线程,而是使用gevent.)
Python库gevent版本0.13.6(PyPI上的当前版本)不会出现pip install在OS X Lion,Python 2.7(以及可能还有其他版本)上.它在Snow Leopard上运行良好.
如何安装此库?
奖励积分如果可以使用pip install,而不是手动或自定义过程,因为它将与自动构建很好地协作.
这是我的pip install输出:
pip install gevent
Downloading/unpacking gevent
Running setup.py egg_info for package gevent
Requirement already satisfied (use --upgrade to upgrade): greenlet in ./tl_env/lib/python2.7/site-packages (from gevent)
Installing collected packages: gevent
Running setup.py install for gevent
building 'gevent.core' extension
gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -isysroot /Developer/SDKs/MacOSX10.6.sdk -arch i386 -arch x86_64 -g -O2 -DNDEBUG -g -O3 -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c gevent/core.c -o build/temp.macosx-10.6-intel-2.7/gevent/core.o
In file included from gevent/core.c:225:
gevent/libevent.h:9:19: …Run Code Online (Sandbox Code Playgroud) 是否可以在python中使用fileConfig更改日志级别而无需重新启动应用程序.如果无法通过fileConfig实现,还有其他方法可以获得相同的结果吗?
更新:这是针对在服务器上运行的应用程序,我希望系统管理员能够更改应用程序在运行时选择的配置文件,并动态更改日志级别.我当时正在使用gevent,因此我添加了我的代码作为使用inotify选择配置文件更改的答案之一.
我目前正在研究Python中的websocket支持,并且对这些产品感到有些困惑.
一方面可以使用Flask + gevent.另一方面,uwsgi有socket支持,最后有一个扩展包括uwsgi和gevent.
实现仅包含其中一个的websockets有什么问题?混合它们我会赢得什么?
改变问题
添加gevent做什么线程uwsgi不会?
我想尝试gevent,但安装后我无法加载任何gevent模块.
安装步骤如下:
sudo apt-get install libevent-dev
sudo pip install greenlet
sudo pip install gevent
Run Code Online (Sandbox Code Playgroud)
环境设置是Ubuntu 10.10 x86_64 GNU/Linux.
当我尝试做一个简单的测试时,我得到:
>>> import gevent
>>> from gevent import socket
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name socket
Run Code Online (Sandbox Code Playgroud)
我怀疑安装没有做它应该做的事,但我不确定是什么问题.
我一直在使用python请求库,最近需要异步发出请求,这意味着我想发送HTTP请求,让我的主线程继续执行,并在调用时调用请求返回.
当然,我是通往grequests库(https://github.com/kennethreitz/grequests),但我对这种行为感到困惑.例如:
import grequests
def print_res(res):
from pprint import pprint
pprint (vars(res))
req = grequests.get('http://www.codehenge.net/blog', hooks=dict(response=print_res))
res = grequests.map([req])
for i in range(10):
print i
Run Code Online (Sandbox Code Playgroud)
上面的代码将产生以下输出:
<...large HTTP response output...>
0
1
2
3
4
5
6
7
8
9
Run Code Online (Sandbox Code Playgroud)
grequests.map()调用显然会阻塞,直到HTTP响应可用.我似乎错误地理解了这里的"异步"行为,而grequest库只是用于同时执行多个HTTP请求并将所有响应发送到单个回调.这准确吗?
我们广泛使用Twisted来处理需要大量异步io的应用程序.在某些情况下,东西是cpu绑定的,为此我们产生了一个进程池来完成工作,并有一个系统来管理多个服务器上的这些 - 所有这些都是在Twisted中完成的.效果很好.问题是很难让新团队成员加快速度.在Twisted中编写异步代码需要近乎垂直的学习曲线.就像人类自然不这么认为那样.
我们也许正在考虑采用混合方法.也许保持xmlrpc服务器部分和进程管理在Twisted中并在代码中实现其他东西,至少在某种程度上看起来是同步的,而不是这样.然后我又喜欢明确的隐含,所以我不得不考虑更多.无论如何,在greenlets上 - 这些东西有多好用?所以有Stackless,你可以从我的Gallentean头像中看到,我很清楚它在第一手使用CCP的旗舰EVE Online游戏方面取得了巨大的成功.那么Eventlet或gevent呢?好吧现在只有Eventlet与Twisted一起使用.然而gevent声称速度更快,因为它不是纯粹的python实现,而是依赖于libevent.它还声称具有较少的特性和缺陷.GEVENT据我所知,它由1个人维护.这让我有点怀疑,但是所有伟大的项目都是这样开始的...然后就是PyPy - 我还没有读完那篇文章 - 只是在这个帖子中看到它:Stackless的缺点.
令人困惑 - 我想知道该怎么做 - 听起来像Eventlet可能是最好的选择,但它真的足够稳定吗?那里的任何人有经验吗?我们应该选择Stackless,因为它已经存在并且是经过验证的技术 - 就像Twisted一样 - 并且它们可以很好地协同工作.但我仍然不愿意使用单独的Python版本来完成这项工作.该怎么办....
这个有点令人讨厌的博客文章对我来说很重要:对于Grownups的异步IO 我没有得到Twisted就像Java一样对我而言Java通常是你处于线程思维中的地方,但无论如何.然而,如果那个猴子补丁的东西真的像那样工作那么哇.哇哇!