
这是楼主的第一个上交到 pypi 的项目,项目名字叫 Jolla 是一个基于 gevent 的高性能 API server
这里是 gevent 所有的特性(来自 gevent 的文档):
以上这些特性,都被 Jolla 继承了
Jolla 也拥有以下独特的特性
当我在写 Jolla 时,想写的是一个高性能的 API server ,它能让使用者以简短而简短的规则去完成 server 的工作,能让他们把她们的计算过程也好运算也好,快速的发到浏览器或移动端,所以我把 Jolla 写的尽可能简单。
项目地址在这 http://salamer.github.io/jolla/ 项目文档教程在这 https://github.com/salamer/jolla/wiki
如果有什么不对的,或是错误的地方,欢迎指点,如果觉得好,可以 star 一下,谢谢啦~
安装是:
pip install jolla 使用绝对简单:
from jolla import WebApp,jolla_server,render def index(request): return render('index.html') class app(WebApp): urls=[ (r'/',index) ] if __name__=="__main__": server=jolla_server(app) server.run_server() (之前在 v 站发错节点了)
1 kindjeff May 6, 2016 支持啊,这周末我来试试 |
3 2225377fjs May 6, 2016 gevent 不是 自己有 wsgi server 么。。?楼主这是个 搞了个 wsgi application 上去。。?其实把 gevent 的 wsgiserver 能和现在大多数的 python web 框架结合起来用的。 |
4 aljun P @2225377fjs 基本上是包装了 gevent 的 pywsgi (非 wsgi ),给日常更简单的使用, |
5 Magic347 May 6, 2016 https://github.com/salamer/jolla/blob/master/jolla/session.py Bug Report : empty()函数逻辑写反了 |
8 tabris17 May 6, 2016 类似 flask 么 |
9 ipconfiger May 6, 2016 用 flask 写好的东西,用 gunicorn 也可以加持 gevent 嘛,何必呢 |
10 kindjeff May 6, 2016 session.py 第 47 行没有设置 value 值时返回 false 吗,还是故意这么写的 |
13 aljun OP @ipconfiger 就是简单点呗,我当时是想搞个怎么简单怎么来的,但又完全能应付一些业务那种 |
14 justfly May 7, 2016 Server 的 方法 run_server 不妨改为 run 。读起来更舒服,不嗦。 |
15 ayaseangle May 7, 2016 via Android 貌似不错。。 |
16 Owenjia May 7, 2016 via Android 表示现在在用 pycnic ,跟这个挺像的。 |
17 mirrosite May 7, 2016 return 应该返回数据,而不是返回 render 模板 |
18 Allianzcortex May 7, 2016 每次看到 LZ 都感觉自己大学白过了一样…… |
19 julyclyde May 7, 2016 把框架和 IO 库合起来并不好吧? |
23 aljun OP @Allianzcortex 啊?为什么? |
25 aljun OP @Owenjia 当时的想法就是,现在要是有一个计算的后端要求,然后需要提供服务,那就把心思放在计算上,然后极为简单的使用 Jolla 扔上去就好,所以我才用的 gevent 的 pywsgi ,性能我测试结果还是很不错的 |
26 mengzhuo May 7, 2016 via iPhone |
27 xxr3376 May 7, 2016 楼主你的 git commit log 实在是太过于混乱了。。。各种 update 不知道在干吗,以及翻看了一下以前的项目发现一屏幕“~~~~”。。。 本来想看看代码精妙之处的,不过看着实在太累。。 |
28 Owenjia May 7, 2016 via Android |
29 xxr3376 May 7, 2016 @Owenjia 支持,为了极其不明显的性能优化把代码的复杂度提升了一个等级完全得不偿失。 顺便看了看代码,一屏幕的 {{ try: self.request['cookies'] = self._environ['HTTP_COOKIE'] except KeyError: self.request['cookies'] = None }} 为啥不直接 self.request['cookies'] = self._environ.get('HTTP_COOKIE', None) 呢。。 |
32 xxr3376 May 7, 2016 @aljun 比如 gevent 的 WSGI IO 库( gevent ), parse query_string 的 urlparse 标准库已经有了。。为何你还要重新造轮子,更何况你的 query_string parser 写的不对。。 |
35 xxr3376 May 7, 2016 @aljun update 没有啥语义,同样是 update 有的时候是更新了下版本号,有的时候随便改了点别的。 在公司里一般都会用 http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html 这类的 commit log ,否则 review 你的 commit 会超费时间。。 |
36 xxr3376 May 7, 2016 @aljun 作为一个 library ,不应该用 print ,而是应该用标准的 logging 。用户可以用 logging scope 去自由的选择要不要看到你的提示。 raise HTTP404Error ,作为一个框架应该是 HTTPStatusError(404),这样就能支持任意的 HTTP Error 了。 |
37 minsheng May 7, 2016 via iPhone 看到 Jolla 突然想知道是什么意思,为什么莫名让我想起了墨西哥边上的一座城市 |
38 bwangel May 7, 2016 额,看到你项目里面刷 PR 的。。。 这个真是。。。。 |
45 lianghui May 7, 2016 项目看了,比我当年毕业时强很多了。说说你的的项目的问题: app 应用层异常 exception ( 500 internal exception )没有做特别的处理 貌似扔给 wsgiserver 去处理了,处理了 404 状态, 403 状态处理缺乏, chunk encoding 处理缺乏。 utf8 编码处理没有考虑,问题比较多。 建议楼主看看 webob 这个项目,或者 cherrypy 这种古董。 其他问题: log 没有,别用 print 基建功能做好单元测试 代码建议: 所有的功能函数,类,方法必须加上注释,哈哈这个很难,不过坚持就好,我给公司的项目和小组都是这样严格要求的。 使用好的 ide 工具可以帮助你加快编码,减少注释带来的烦恼,忘词等(使用 java 一年得到的真谛)。 |
52 icybee May 7, 2016 cool 。。。。 |
54 aljun OP 挖个坟,因为更新 |
55 EchoUtopia Jan 9, 2017 赞一个 |