Articles of python

为什么独angular兽/ Gunicorn缓慢服务于静态内容?

我在这里读到Unicorn / Gunicorn HTTP服务器“不擅长静态文件服务”,而且Nginx更擅长服务静态内容。 有人可以解释为什么这是? 我理解Nginx和Gunicorn的专业angular色,Nginx是一个反向代理,而且Gunicorn实际上可以在需要时提供静态文件。

在生产中运行Python Eve Rest API

现在是时候将我的Python Eve API移动到生产环境中了。 有几种方法可以做到这一点,最常见的要求是: 错误logging 自动重生 多个进程(如果可能的话) 我find的最好的解决scheme是有一个nginx服务器作为前端服务器。 随着python前夕在uWSGI中间件上运行 。 问题:我有一个不被uwsgi调用的自定义__main__ 。 有没有人有这个configuration运行或另一个build议? 一旦它起作用,我将分享一个正在运行的configuration。 谢谢。 解决scheme(更新): 根据以下的build议,我将Eve()方法移至init .py,并运行带有wsgi.py的应用程序。 文件夹结构 : webservice / init.py webservice / modules / … settings.py wsgi.py init.py包含的地方 app = Eve(auth=globalauth.TokenAuth) Bootstrap(app) app.config['X_DOMAINS'] = '*' … 和wsgi.py包含 from webservice import app if __name__ == "__main__": app.run() wsgi.ini [uwsgi] chdir=/var/www/api/prod module=wsgi:app socket=/tmp/api.sock processes=1 […]

在Python中跟踪系统和实时状态分析

这个问题涉及到一个老问题: MySQL跟踪系统 。 总之:我必须实现一个使用Python的高负载的跟踪系统。 对于数据库部分,我决定了mongoDB(这听起来像是这个工作的正确工具)。 开发语言将是Python。 我正在考虑在nginx后面使用CherryPy应用程序的几个实例。 这背后的原因是,我不想自己处理所有的wsgi部分,但另一方面,我不需要一个完整的Web框架,因为应用程序将是简单的,没有ORM的需要。 我的问题是: 我应该使用CherryPy内置服务器还是应该使用Apache和modwsgi(或其他服务器)? 这听起来像一个合理的方法(nginx,mongoDB)? 如果不是,你会推荐什么? 先谢谢你。

如何找出为什么uWSGI杀死工人?

我有金字塔的应用程序。 我使用这些configuration在uWSGI中运行它: [uwsgi] socket = mysite:8055 master = true processes = 4 vacuum = true lazy-apps = true gevent = 100 和nginxconfiguration: server { listen 8050; include uwsgi_params; location / { uwsgi_pass mysite:8055; } } 通常都很好,但是有时候uWSGI会杀死工人。 我不知道为什么。 我在uWSGI日志中看到: DAMN ! worker 2 (pid: 4247) died, killed by signal 9 🙁 trying respawn … Respawned uWSGI […]

避免RDNS查找HTTP请求

我尝试使用pythonbuild立一个HTTP连接,使用下面的代码。 我自己做DNS解决,因为我不能在有问题的机器上更改hosts和resolv.conf文件。 class resolver(object): def __init__(self, server): self.server = server def __call__(self, host): res = check_output('host %s %s' % (host, self.server), shell = True) ips = findall('has address (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', res) return choice(ips) class http_connection(httplib.HTTPConnection): dns_server = '8.8.8.8' def connect(self): resolv = resolver(http_connection.dns_server) self.sock = socket.create_connection((resolv(self.host), self.port), self.timeout) … x = http_connection('%s:%d' % (args.host, args.port)) x.request('GET','/start/') […]

如何创build具有依赖关系的Python项目的安装程序/安装程序?

我用GUI创build了一个简单的软件。 它有几个源文件。 我可以在我的编辑器中运行该项目。 我认为它已经准备好了1.0版本。 但我不知道如何为我的软件创build安装程序/安装程序。 源是python。 环境是Linux(Ubuntu)。 我使用了一个没有标准Python库的外部库。 我如何创build安装程序,以便将源代码分发到tar文件中。 用户通过运行安装程序/安装程序文件将软件安装到他的机器上(Linux)? 请注意 :运行安装程序时,它应该自动处理相关性。 (另外,我不想构build一个用于分发的可执行文件。)类似于键入时发生的情况: sudo apt-get install XXXX

如何可靠地获得扭曲的衍生过程?

我有一个Python程序,使用psutil来运行一些各种扭曲的命令。 扭曲的产卵和守护进程,并写一个foo.pid从中我可以读取PID。 它也设置为在进程终止时清除该pid文件,这意味着生成的进程可能完成得太快而无法读取pid。 如果不能写pid文件的话, twistd会返回一个错误代码,所以我可以假定没有pid文件,也没有扭曲的错误代码意味着这个进程已经成功并很快终止了,但是整个过程看起来如此片面。 更不用说等待pid文件被填充内容,同时也处理了被填充的可能性,但又一次去除了。 有没有更好的办法?

如何将进程状态从睡眠状态更改为在Linux中运行?

我有一个python程序需要扫描一些大的日志文件来提取有用的信息。 在这个程序中,为了更好地利用服务器(运行Ubuntu 12.04 LTS,拥有64个内核和96 GB内存)的计算资源, 我创build了一个大小为10的进程池,并向这些池工作者应用服务器。 每个作业使用file.readlines()从几个大文件(每个大约file.readlines() ,共20个文件)中file.readlines() ,然后逐行分析以find有用的信息并将结果保存到字典中。 在所有文件被扫描和分析之后,结果字典被写入磁盘。 另外,在整个脚本中没有显式调用gc.collect() 。 我使用root账号在服务器上启动了这个程序,这些程序首先运行正常:这个程序的每个进程将占用大约3.8GB的内存,所以共有40GB 几个小时后, 其他用户启动另一个耗费内存的程序(也使用root帐户),它积极使用几乎所有的内存(占内存总量的99%),之后该程序被CTRL-Z中断, killall -9 process_name 但是,在这之后,我发现我的大部分池工的进程状态已经改为S,这些睡眠进程的CPU使用率降为0.根据man top : The status of the task which can be one of: 'D' = uninterruptible sleep, 'R' = running, 'S' = sleeping, 'T' = traced or stopped, 'Z' = zombie 我使用ps -axl命令来检查进程正在hibernate的内核函数的名称, 事实certificate这些poolworker进程在_fastMutex上_fastMutex 。 这种情况会持续很长一段时间(进程状态现在仍然是S),我不想重新启动我的进程再次扫描所有文件, 我怎么能改变这些进程从睡眠状态到运行?

Crontab和脚本

我有debian linux。 我从用户crontab -e创build了这个文本: 0 * * * * python /home/user/CronLogic.py 15 * * * * python /home/user/CronLogic.py 30 * * * * python /home/user/CronLogic.py 45 * * * * python /home/user/CronLogic.py */1 * * * * date > /tmp/TEST 最后一个string运行良好,但运行python脚本失败: /bin/sh: 1: /usr/bin/rcssserver: not found 代码是: #!/usr/bin/python cmd ='/usr/bin/rcssserver' err = open('CronLogicERRORS', 'a') server […]

为什么我的python newt / snack程序有奇怪的字符?

我已经有了一个使用newt / snack模块的Python程序,并且在Fedora 17官方发布版本中工作正常。 我需要将程序移植到initrd ram磁盘 ,即只运行initrd / vmlinuz的Linux,但没有任何其他文件系统或squashfs映像。 我select了Fedora 17的initrd.img ram disk,因为它内置了Python 2.7.3。 我需要做的是添加蝾螈/快餐模块及其依赖。 我已经从Fedora 17官方发布中添加了newt / newt-python。 该程序确实运行,但在边界有奇怪的字符。 我认为这是蝾螈/零食相关。 请帮忙! 任何build议表示赞赏。