Articles of python

如何在Ubuntu上优化uWSGI python app + nginx?

我有一个简单的Flask应用程序,公开一个API。 调用api运行一个pythonalgorithm,它执行大量的string操作和文件读取(不写)。 algorithm大约需要1000ms。 我试图看看是否有任何优化并发请求。 我在4个vCPU虚拟机的单个实例上运行。 我写了一个客户端,每1000ms发一个请求。 RAM使用率最低,CPU使用率约为35%。 当我每隔750毫秒提出请求。 内存使用量没有增加太多,但CPU使用率翻了一番,达到了70%。 如果我每500ms增加一次请求,响应将开始花费更长时间,最终超时。 CPU使用率为100%,RAM仍然很小。 我按照这个教程来设置我的应用程序。 我在我的uWSGI设置中启用了线程。 但是,我没有真正注意到很多的差异。 我希望得到一些build议,我可以做什么软件/设置方面更好地响应并发请求。

Flask + sklearn不能joblib.load AttributeError“模块”对象没有属性

Flask应用程序。 我试图joblib.load并得到AttributeError'ManyToOneClassifier' 。 但是我已经用class导入了所有的模块。 如果我将尝试加载模块与模块中的类与它…再次错误。 但是,当我加载它在__ main __ – 很好,所有的作品…上传时, uwsgi没有看到我的__ main __中的任何东西。 我是C#程序员(.NET,微软等),与nginx和Linux不同。 from clf_service import app, classificator from clf_service.classificator import ManyClassifier, ManyToOneClassifier from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.externals import joblib from os import path application = app APP_ROOT = path.dirname(path.abspath(__file__)) print "Loading models" app.model = joblib.load(path.join(APP_ROOT, "clf_service/static/ml/clf/model_vec_to_one.pkl")) app.vec = joblib.load(path.join(APP_ROOT, "clf_service/static/ml/clf/vec_to_one.pkl")) print "Done, […]

运行的uwsgi线程太多

早上好, 我是networking服务器基础架构和pipe理的新手。 我尝试使用nginx + uwsgi + django和python装载Web服务器时遇到以下问题:每次刷新或请求到用户正在执行的网页时,uwsgi都会创build2-3个永不终止的新线程。 几天之后,我终于有超过30000个线程,为了保持网页的性能,我必须重新加载uwsgi。 要检查线程数,我使用以下命令: ps – eLf | grep uwsgi (你可以看到附加的结果)。 我的uwsgiconfiguration如下: [uwsgi] vhost = true socket = /tmp/mySocket.sock master = true processes = 4 max_request = 300 vacuum = true die-on-term = true close-on-exec = true harakiri = 30 wsgi-file = /home/virtualEnv/server/wsgi.py virtualenv = /home/virtualEnv pythonpath = /home/virtualEnv/myServer chdir=/home/virtualEnv/myServer […]

Django的。 在此服务器上找不到请求的URL /

我在CentOS 7上安装了我的Django 1.9.2项目,并得到了请求的URL /在这个服务器上没有find错误。 日志不会提供任何nGinx错误。 在我的PC与manage.py runserver它的作品。 我如何在服务器上安装我的项目: 我正在使用这个教程 – 但我在我的环境中安装了python 3.4.3 – 创build了一个项目名称的项目,因为我在PyCharm中 – 用PyCharm中的项目通过FTPreplace服务器上的项目 数据库工程(makemigration,migrate,collectstatic),site.com/admin工程,我得到我的自定义404.html页面,位于全局模板文件夹。 DEBUG = False ALLOWED_HOSTS = [ '*', ] 我的项目的结构是: 在这里input图像描述 我的全球url: from django.conf.urls import include, url from django.contrib import admin from bakot import urls as bakot_urls from loginsys import urls as loginsys_urls urlpatterns = [ url(r'^admin/', include(admin.site.urls)), url(r'^', […]

parsingX-Forwarded – 在Heroku上用werkzeug获得IP

Heroku将来自客户端的请求代理到服务器,因此您必须parsingX-Forwarded-For以查找原始IP地址。 X-Forwarded-For的一般格式是: X-Forwarded-For: client1, proxy1, proxy2 使用werkzeug烧瓶,我试图想出一个解决scheme,以访问客户端的原始IP。 有没有人知道这样做的好方法? 谢谢!

按相反的顺序处理这些行

我如何处理日志文件(在我的情况nginx access.log)以相反的顺序? 背景我正在开发一个日志文件分析器脚本,我只是无法得到我的头如何从最后处理大型日志文件,所以我可以整理出我需要的最新date的时间框架。

如何防止使用nginx的auth_request指令和烧瓶应用程序看似随机的重新authentication提示?

设置: 系统应该如下: 有两个AWS负载均衡器,每个负载均运行Docker容器。 一个是私人负载均衡器,它包含一个任意的服务,应该保护它免受未经授权的访问; 另一个是面向公众的负载均衡器,它包含authentication门户。 Docker容器内部(在公共负载平衡器上)是一个监听80端口的Nginx服务器,以及8000端口上的Flask应用。 Nginx使用auth_request指令向Flask应用程序发出一个子请求(在请求中传递凭证作为标题),期待200或401响应。 Flask应用程序从请求中提取证书并检查该用户名是否已经是flask.session一部分。 如果是这样,它立即返回200响应; 否则,它会尝试对外部真相来源进行authentication。 如果成功,则将该用户添加到flask.session并且该应用程序返回200响应; 否则,它将返回一个401响应。 还有一个检查到期; 例如,如果用户login超过一个小时,应用程序应该将其从flask.session删除,并返回401响应。 用户然后可以进行新的login请求。 如果响应为200,则将stream量路由到专用负载均衡器。 用户的浏览器应该caching他们提交的证书,所以每个新的请求应该能够立即看到用户是flask.session一部分,并避免进行新的身份validation尝试。 问题: 在随机刷新或导航受保护资源时(成功validation后),有时会出现身份validationpopup窗口,用户需要再次进行validation。 他们可以提交,单个资源将被加载,然后再次提示重新进行身份validation。 例: 受保护资源是由索引页,CSS文件和三个图像组成的静态网站。 初始authentication后,用户多次刷新页面。 其中一个时间,身份validation提示将被触发。 他们将再次input他们的凭据,索引页面将加载。 他们会再次提示CSS文件,然后再为每个图像。 代码 我不知道有多less事情需要链接到这里来解决这个问题,所以我将从负责创buildauth_request子请求和后续路由的nginx文件开始,并且负责创build两个python文件进行身份validation请求和处理会话。 nginx.default server { listen 80; server_name _; location / { auth_request /auth; proxy_pass {{resource_endpoint}}; } location /auth { proxy_pass {{auth_backend}}; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_set_header X-Original-URI […]

无法使uginx与uWSGI一起工作

我有这个名为test.pytesting文件: def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World"] 我使用这个命令运行uWSGI: uwsgi –http :8001 –wsgi-file test.py 我可以通过转到xxxx.xxxx.xxxx.xxxx:8001来在浏览器中看到“Hello World” 现在我正在尝试添加Nginx。 这是我的文件mysite_nginx.conf : # mysite_nginx.conf # the upstream component nginx needs to connect to upstream django { # server unix:///path/to/your/mysite/mysite.sock; # for a file socket server 127.0.0.1:8001; # for a web port socket (we'll use this first) […]

SQLAlchemy查询返回无

我有一个Web应用程序使用SQLAlchemy和MySQL服务器在我的Ubuntu 16和Nginx的+ uwsgi。 当创造引擎,我把 echo=True 查询查询的跟踪。 我有问题注册用户,每次在烧瓶login时调用user_loader,我执行: dbsession.query(User).filter_by(id=user_id).first() 我得到的结果是: INFO sqlalchemy.engine.base.Engine SELECT user.id AS user_id, user.name AS user_name, user.email AS user_email, user.pass$ Mar 29 23:48:56 ubuntu-512mb-sgp1-01 uwsgi[26160]: FROM user Mar 29 23:48:56 ubuntu-512mb-sgp1-01 uwsgi[26160]: WHERE user.id = %s Mar 29 23:48:56 ubuntu-512mb-sgp1-01 uwsgi[26160]: LIMIT %s Mar 29 23:48:56 ubuntu-512mb-sgp1-01 uwsgi[26160]: 2017-03-29 23:48:56,517 INFO sqlalchemy.engine.base.Engine ('61', […]

Nginx会尽早切断静态文件的下载

我有一个Flask应用程序,它可以通过x-accel-redirect将请求传递给NGINX的请求redirect到NGINX。 有时,这些下载将在完成之前被切断。 例如,通过cURL,我会看到: curl http://my_server/some_static_file.tar > temp.tar % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 77 14.4G 77 11.2G 0 0 55.8M 0 0:04:24 0:03:25 0:00:59 58.9M curl: (18) transfer closed with 3449105332 bytes remaining to read 这似乎更经常发生非常大的文件(10GB +),但我也看到它也发生在约90MB的小文件。 Nginx的访问日志显示通过和被服务不同的请求,不完整的数据量: 1.2.3.4 – – [18/Apr/2017:01:16:26 +0000] […]