Python Flask 框架的并发能力及线,进程模型

本文旨在测试 Python Flask 框架的默认并发能力,即同时能处理多少个请求,以及请求等待队列大致有多大; 并找到如何改变默认并发数。虽然网上或许很容易找到它们的默认并发数,但通过实验的方式可以得到更感性的认识。

本文写作时使用的环境为

  1. 测试机器为 MacBook Pro, CPU 6 核超线程,内存 16 Gb
  2. JMeter 5.5 -- 连续发送请或压力测试
  3. Python 3.10.9
  4. Flask 2.2.2

从 JMeter 每半秒发送一个请求,连续发送 1000 个,程序中 API 方法接受到请求后 sleep 800 秒,保证在全部 1000 个请求送出之前一直占着连接,以此来找到同时被处理的请求数目,并且有足够的时间统计当前的 TCP 连接数。在测试极端规模的并发数时,由于在 Mac OS X 很难突破 5000 个线程的限制,这时就让 JMeter 分布到远程 Linux(Docker 或虚拟机) 上执行。

请求的 URL 是 http://localhost:8080/?id=${count}, 带一个自增序列用以识别不同的请求, JMeter 的 Thread Group 配置为 Number of Threads (users): 1000, Ramp-up period (seconds): 500 阅读全文 >>

Python 中的 urlencode 和 urldecode 操作

Web  编程中由于需要用 Form 或 URL 来传递参数,所以必然会有 urlencode 和 urldecode 的操作,Python Web 也不例外。Python 对 URL 的编解码操作提供了 urllib 模块,下面例子中所使用的 Python 版本是  3.6.7,不同的 Python 版本可能略有差异。

简面言之本文就是关于以下六个函数的使用,更多关于 urllib 的用法请自行进一步研究。

from urllib.parse import urlencode, parse_ql, quote, quote_plus, unquote, unquote_plus

为什么两个 urlencode 和  urldecode 操作会涉及到六个函数的应用呢,分别来讲述

1. urlencode

Python 的  urllib 直接提供了  urlencode 函数,它的操作数是一个字典 阅读全文 >>

Apache 中运行 Python CGI 程序

Web 程序我还是喜欢用 Apache 来作为入口,因为我用的系统是 Mac OS, Apache 它就静静的躺上那儿了。最好是都像 PHP 那样的程序,无需启动额外的服务,这种使用方式的缺陷是不太适合于做微服务。

这儿呢,我也是来探索如何在 Apache 中运行 Python 的 CGI 程序,这主要是涉及了 Apache 与 Python 的集成。集成方式有直接集成(mod_python),CGI,FastCGI, WSGI 和 uWSGI。本文主要是讲如何运行一个简单的 Python CGI。

直接集成(mod_python)

虽然由于多方面的安全因素,这已经成为历史了,但还是提一下。参见

  1. Apache HTTP Server/mod_python(它推荐使用 mod_wsgi, 以下该节相关内容摘在本链接,没有亲自尝试)
  2. mod_python 官网(最后的更新是 2013-11-13)

需要安装模块 mod_python.so,并在 httpd.conf 加上相关的配置 阅读全文 >>

Spring MVC 碰到 java.lang.NoSuchFieldError: APPLICATION_CONTEXT_ID_PREFIX

Spring MVC 应用在 Tomcat 启动的时候出现了下面的错误:

java.lang.NoSuchFieldError: APPLICATION_CONTEXT_ID_PREFIX
 at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:430)
 at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:458)
 at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:339)
 at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:306)
 at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127)
 at javax.servlet.GenericServlet.init(GenericServlet.java:212)
 at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173)
 at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993)
 at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4350)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4659)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 阅读全文 >>

Web开发人员应当知道的15个开源项目

如今,构建网站和开发Web应用程序已经不仅要求开发人员是一名优秀的程序员,更需要聪明的程序员。这也就是说,在可能的情况下,重复使用已有的代 码和应用程序,而不是自己重头开始。开源由来已久,并且很多网站的构建也使用了开源。开发人员都知道Linux、Apache、MySQL及 PHP (LAMP)。 但是除那些之外的其他开源项目呢?作为一名Web开发人员,你可以借助诸多可用的项目,以节省开发时间,或提高程序性能。

下面让我们看一下哪些开源项目可供大家免费使用。

可供使用的新型数据库

传统上讲,你可能习惯使用MySQL。尽管MySQL是一个非常棒的数据库,但诸多试图解决MySQL存在的问题的新型数据库已经问世。 阅读全文 >>

Web开发人员必备的20款超赞的jQuery插件

导语:jQuery的易扩展性吸引了来自全球的开发者来共同编写jQuery插件。jQuery插件不仅能够增强网站的可用性,有效地改善用户体验,还可以大大减少开发时间。现在的jQuery插件很多,可以根据您的项目需要来选择。这里为您介绍20款非常不错的插件。

Creative Radical Web Typography

Lettering.js是一个轻量经的、易于使用的jQuery插件,可创造出极具个性的网页排版,是2010年最佳jQuery插件之一。 阅读全文 >>

HTML 简史

HTML 是 Web 统一语言,这些容纳在尖括号里的简单标签,构成了如今的 Web。1991 年,Tim Berners-Lee 编写了一份叫做 “HTML 标签”的文档,里面包含了大约20个用来标记网页的 HTML 标签。他直接借用 SGML 的标记格式,也就是后来我们看到的 HTML 标记的格式。本文讲述了 HTML 这门 Web 标记语言的发展简史。

从 IETF 到 W3C: HTML 4 之路

HTML 1 并不曾存在,HTML 的第一个官方版本就是由 IETF (互联网工程任务组) 推出的 HTML 2.0。问世之前,这个版本中的很多细则已经被实现,比如,1994年的 Mosaic 浏览器已经实现了在文档中嵌入图片的方法,后来 HTML 2.0 便吸纳了 img 这个标签。 阅读全文 >>

雅虎JavaScript架构师:网页开发技术安全优先

由于当前技术仍偏向功能强化为主要思维,指令码趋向庞杂的结果,容易产生更多安全漏洞,且失去快速因应攻击调整架构的灵活性。
身 为JavaScript网路技术重要推手的雅虎(Yahoo!)架构设计师Douglas Crockford表示,现行网页开发技术思维仍偏重多媒体功能或浏览效能的提升,未来应以安全为第一优先。

Crockford 现为Yahoo!资深JavaScript架构师,负责YUI(Yahoo! User Interface)的架构设计,并且担任ECMA JavaScript 2.0技术委员会成员,为JavaScript开发社群大师级人物,此次受邀来台参加OSDC(Open Source Developer's Conference Taiwan)进行专题演讲,向国内开发者介绍ECMA JavaScript的发展。 阅读全文 >>