我和Django使用了两个不同的python oauth库来通过twitter进行身份验证.使用WSGI进行apache设置.当我重新启动服务器时,一切都运行良好大约10分钟,然后httplib似乎锁定(请参阅以下错误).
我只运行了1个进程和1个WSGI线程,但这似乎没有任何区别.
我无法弄清楚为什么它会锁定并给出这个CannotSendRequest错误.我花了很多时间来解决这个令人沮丧的问题.任何有关它的提示/建议将不胜感激.
File "/usr/lib/python2.5/site-packages/django/core/handlers/base.py", line 92, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "mypath/auth/decorators.py", line 9, in decorated
return f(*args, **kwargs)
File "mypath/auth/views.py", line 30, in login
token = get_unauthorized_token()
File "/root/storm/eye/auth/utils.py", line 49, in get_unauthorized_token
return oauth.OAuthToken.from_string(oauth_response(req))
File "mypath/auth/utils.py", line 41, in oauth_response
connection().request(req.http_method, req.to_url())
File "/usr/lib/python2.5/httplib.py", line 866, in request
self._send_request(method, url, body, headers)
File "/usr/lib/python2.5/httplib.py", line 883, in _send_request
self.putrequest(method, url, **skips)
File "/usr/lib/python2.5/httplib.py", line 770, in putrequest
raise CannotSendRequest()
Run Code Online (Sandbox Code Playgroud)
CannotSendRequest
尝试在Rackspace.com上设置服务器.
做了以下事情:
在快速入门中,似乎初始化了一个"hello world"应用程序:
创建文件" myapp.py ":
(tutorial) $ vi myapp.py (tutorial) $ cat myapp.py
" myapp.py "的内容
def app(environ, start_response):
data = "Hello, World!\n"
start_response("200 OK", [
("Content-Type", "text/plain"),
("Content-Length", str(len(data)))
])
return iter([data])
Run Code Online (Sandbox Code Playgroud)
由于我对服务器知之甚少,所以我不知道下一步该做什么.我尝试在浏览器中输入服务器的IP地址,但这似乎导致超时.
我不确定是否有:
什么是下一个步骤?
非常感谢!
为了帮助我进一步理解WSGI,我正在寻找一个解释应用程序流程的图表,从webserver(例如apache)到大量中间件到"代码"(如print "hello world"位).
我已经从wsgi.org上阅读了关于WSGI的各种文章,但它仍然没有为我"点击",而且对于图表而言谷歌没有带来任何有用的东西,除了这对django而言,虽然有趣,但期望用户理解如何中间件链接等.
既然"一张图片胜过千言万语",那么有没有比这更低/更简单的图表呢?
我正在使用Ubuntu 10.04.
我在/home/wong2/Code/python/django2/named 下创建了一个django项目,atest
并setting.wsgi在同一目录下创建了一个wsgi文件.
这里的内容是setting.wsgi:
import os
import sys
path = '/home/wong2/Code/python/django2'
if path not in sys.path:
sys.path.append(path)
os.environ["DJANGO_SETTINGS_MODULE"] = "atest.settings"
from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()
Run Code Online (Sandbox Code Playgroud)
这是我添加到我的httpd.conf中的内容:
<VirtualHost *:80>
ServerName localhost
WSGIScriptAlias / /home/wong2/Code/python/django2/setting.wsgi
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</Directory>
<Directory "/home/wong2/Code/python/django2/atest">
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
问题是,当我访问http:// localhost时,它说
被禁止
您无权访问此服务器上的/.
非常感谢.
我最近开始学习Python,在所有的研究中,我认为从Python3开始是好的(这就是Guido在Google IO'11上所建议的).但主要(网络)框架缺乏对Python3的支持确实让我感到烦恼.我知道同样的问题已经在整个互联网甚至StackOverflow上被问过,但是因为我们现在有了最终的PEP3333(WSGI 1.0.1),它们是支持/支持Py3的框架.我能找到的唯一一个是CherryPy3.2.0,正如项目页面所说,它符合PEP 3333标准.我特别想了解Django/Turbogears/Pylons/Flask(任何路线图都会提供丰富的信息).
我正在进行一项科学实验,大约有二十多名测试人员互相打/回合比赛.现在,它是一个带有WSGI接口的Python Web应用程序.我想用websockets增强可用性:当所有玩家完成转弯时,我想通知所有客户更新他们的状态.现在,每个人都必须等待转弯超时,或者不断重新加载并等待"转弯仍然在进行中"错误消息不再出现(忙于等待,有效).
我阅读了多个websocket库的文档,我理解了websockets如何工作,但我不确定混合WSGI和websockets的体系结构:我可以在同一个进程中拥有一个websockets和一个WSGI服务器(如果有的话,如何,使用任何websockets库)只需my_websocket.send_message()从WSGI处理程序调用,或者我应该有一个单独的websockets服务器并做一些IPC?或者我不应该混合它们?
编辑,6个月后:我最终启动了一个单独的websockets服务器进程(使用Autobahn),而不是将其与WSGI服务器集成.原因是分离它们中的两个更容易和更清洁,并且从WSGI进程(服务器到服务器通信)与websockets服务器交谈是直接的,并且在使用websocket-client的第一次尝试时工作.
我们在Python中有并发问题.这些WSGI服务器无法正常工作.我环顾四周,没有像Golang写的WSGI服务器及其goroutines.
有什么原因?
我正在与我的托管服务提供商合作以启动和运行Django应用程序,但我们都没有经验丰富,我们基本上完全走到了尽头.
我没有直接访问conf文件,但是这里的内容是如何描述给我的:
<IfModule mod_wsgi.c>
WSGIScriptAlias /fredapp/ /home/fred/public_html/cgi-bin/fredapp/apache/django.wsgi
WSGIDaemonProcess fred threads=15 display-name=%{GROUP} python-path=/home/fred/public_html/cgi-bin/fredapp/apache/
WSGIProcessGroup fred
WSGIApplicationGroup %{GLOBAL}
</IfModule>
Alias /robots.txt /home/fred/public_html/fred-site/robots.txt
Alias /favicon.ico /home/fred/public_html/fred-site/favicon.ico
Alias /settings/media/ /home/fred/public_html/fred-site/media/
Run Code Online (Sandbox Code Playgroud)
我的"django.wsgi"脚本没什么特别的:
import os, sys
sys.path.append('/home/fred/public_html/cgi-bin/')
sys.path.append('/home/fred/public_html/cgi-bin/fredapp/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'fredapp.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Run Code Online (Sandbox Code Playgroud)
所以我的理解是,所有这一切都意味着如果有一个请求进入domain.com/fredapp/,它应该通过django.wsgi转交给应用程序.但是,我得到的唯一回应是:
[Fri Jan 22 18:46:08 2010] [error] [client xx.xxx.xx.xx] File does not exist: /home/fred/public_html/domain.com/500.shtml
[Fri Jan 22 18:46:08 2010] [error] [client xx.xxx.xx.xx] mod_wsgi (pid=26760): Exception occurred processing WSGI script '/home/fred/public_html/cgi-bin/fredapp/apache/django.wsgi'.
[Fri Jan 22 18:46:03 2010] [error] [client xx.xxx.xx.xx] File does …Run Code Online (Sandbox Code Playgroud) 我有一个在Gunicorn下运行的Flask应用程序,使用同步工作器类型和20个工作进程.该应用程序在启动时读取大量数据,这需要时间并使用内存.更糟糕的是,每个进程加载自己的副本,这会导致它花费更长的时间并占用20倍的内存.数据是静态的,不会改变.我想加载一次,让所有20名员工分享它.
如果我使用该preload_app设置,它只在一个线程中加载,并且最初只需要1X内存,但是一旦请求开始进入,它似乎会变成20X.我需要快速随机访问数据,所以我宁愿不做IPC.
有没有办法在Gunicorn流程之间共享静态数据?