标签: cherrypy

cherrypy如何处理用户线程?

我正在研究django app,我正在使用cherrypy作为服务器.Cherrypy为每个页面视图创建一个新线程.我希望能够从其中任何一个中访问所有这些线程(负责与django交谈的线程).更具体地说,我希望能够从其中任何一个中访问每个线程的thread_data.这可能吗?如果是这样,我该怎么办?

django concurrency multithreading cherrypy

4
推荐指数
1
解决办法
2919
查看次数

Apache套接字没有关闭?

我有一个使用CherryPy编写的Web应用程序,它在本地运行127.0.0.1:4321.我们使用mod-rewrite和mod-proxy让Apache充当反向代理; Apache还处理我们的SSL加密,最终可能用于传输所有静态内容.

这一切都适用于小型工作负载.但是,我最近urllib2编写了一个压力测试脚本,可以模拟100个客户端的工作负载.一段时间后,每个客户端从Apache获得503错误,表明Apache无法连接127.0.0.1:4321.CherryPy运行正常,但我的Apache错误日志显示如下行:

[Thu Oct 02 12:55:44 2008] [error] (OS 10048)Only one usage of each socket address (protocol/network address/port) is normally permitted. : proxy: HTTP: attempt to connect to 127.0.0.1:4321 (*) failed

谷歌搜索此错误表明Apache可能已用完套接字文件描述符.由于我只运行了100个客户端,这意味着我的urllib2连接和Apache 之间的连接没有被关闭(我肯定是在调用.close()返回值urlopen),还是在Apache和CherryPy之间.

我已经确认我的urllib2请求是发送HTTP Connection: close标头,尽管KeepAlive On如果重要的话配置了Apache .

如果重要,我使用的是Python 2.5,Apache 2.2,CherryPy 3.0.3,并且服务器在Windows Server 2003上运行.

那么我的下一步是什么阻止这个问题呢?

python apache mod-proxy cherrypy urllib2

4
推荐指数
2
解决办法
4945
查看次数

如何在CherryPy中执行异步后处理?

上下文: 想象一下,你有一个标准的CherryPy hello word app:

   def index(self):
      return "Hello world!"
   index.exposed = True
Run Code Online (Sandbox Code Playgroud)

并且您希望进行一些后处理,即记录请求处理或只记录我们从特定IP调用的事实.你会做的可能是:

def index(self):
   self.RunMyPostProcessing()
   return "Hello world!"
index.exposed = True
Run Code Online (Sandbox Code Playgroud)

但是,这会增加您的请求处理时间.(顺便说一句.如果你想在每个函数上调用它,你可能会使用装饰器,甚至是一些更复杂的方法).

问: 有没有建立一个全球性的线程知道队列(缓冲)到每个请求可以写消息(事件)需要被记录的方式,而一些神奇的功能会抓住它和后处理?你知道这种事情的模式吗?

我打赌CherryPy支持这样的东西:-)

先感谢您...

python asynchronous cherrypy

4
推荐指数
1
解决办法
2797
查看次数

CherryPy3和IIS 6.0

我有一个使用Cherrypy框架的小型Python Web应用程序.我绝不是网络服务器的专家.

我在我们的Ubuntu服务器上使用mod_python让Cherrypy使用Apache.但是,这一次,我必须使用Windows 2003和IIS 6.0来托管我的网站.

该网站作为一个独立的服务器完美运行 - 我在使IIS运行时迷失了方向.我在过去的一天里用谷歌搜索并盲目地尝试任何一切,以便让它运行起来.

我已经安装了网站告诉我的所有各种工具(Python 2.6,CherrpyPy 3,ISAPI-WSGI,PyWin32),并且已经阅读了所有文档.这篇博客最有帮助:

http://whatschrisdoing.com/blog/2008/07/10/turbogears-isapi-wsgi-iis/

但我仍然迷失了运行我的网站所需要的东西.我找不到任何详尽的例子或者如何开始.我希望这里有人可以提供帮助!

干杯.

python iis-6 cherrypy isapi-wsgi

4
推荐指数
1
解决办法
1941
查看次数

cherrypy.tree.mount和mod_wsgi

我过去常常使用带有mod_python的cherrypy,我用cherrypy.tree.mount调用构建我的控制器树,我想保留它们(它们通过代码传播).现在我必须使用mod_wsgi.示例:来自cherrypy wiki

import sys
sys.stdout = sys.stderr

import atexit
import threading
import cherrypy

cherrypy.config.update({'environment': 'embedded'})

if cherrypy.__version__.startswith('3.0') and cherrypy.engine.state == 0:
    cherrypy.engine.start(blocking=False)
    atexit.register(cherrypy.engine.stop)

class Root(object):
    def index(self):
        return 'Hello World!'
    index.exposed = True

application = cherrypy.Application(Root(), script_name=None, config=None)
Run Code Online (Sandbox Code Playgroud)

我的问题是每次cherrypy.tree.mount通话都会产生一个cherrypy.Application.mod_wsgi想要一个名为的对象'application'.

我知道你可以用类变量构建一个樱桃树,但我不想这样做.

有没有办法使用cherrypy.tree.mount并获得一个应用程序对象?

还有cherrypy.tree.graft,但我认为这是出于不同的目的.

python apache mod-wsgi cherrypy

4
推荐指数
1
解决办法
2361
查看次数

收到键盘中断后立即退出CherryPy?

有一种简单的方法可以让CherryPy在os._exit(0)获得^C中断后执行吗?

它通常会等待所有的线程终止这是不是因为我希望它立即关闭调试很有用.

python multithreading cherrypy

4
推荐指数
1
解决办法
1371
查看次数

如何检测cherrypy是否正在关闭

我已经制作了一个基于cherrypy的服务器,但我有一个重复的任务,需要很长时间(超过一分钟)才能运行.这一切都很好,直到我需要关闭服务器,然后我等待线程完成.

我想知道你如何在客户端线程中检测到cherrypy shutdown,以便线程可以在服务器关闭时中止.

我是这样的:

class RootServer:
    @cherrypy.expose

    def index(self, **keywords):
        for i in range(0,1000):
            lengthyprocess(i)
            if server_is_shutting_down():
                return
Run Code Online (Sandbox Code Playgroud)

python cherrypy

4
推荐指数
1
解决办法
2174
查看次数

你如何在CherryPy中使用cookie和HTTP基本身份验证?

我有一个需要身份验证的CherryPy Web应用程序.我有一个HTTP基本身份验证工作,其配置如下所示:

app_config = {
    '/' : {
        'tools.sessions.on': True,
        'tools.sessions.name': 'zknsrv',
        'tools.auth_basic.on': True,
        'tools.auth_basic.realm': 'zknsrv',
        'tools.auth_basic.checkpassword': checkpassword,
        }
    }
Run Code Online (Sandbox Code Playgroud)

HTTP auth在这一点上很有用.例如,这将为我提供我在内部定义的成功登录消息AuthTest:

curl http://realuser:realpass@localhost/AuthTest/
Run Code Online (Sandbox Code Playgroud)

自会话开始以来,我可以保存cookie并检查CherryPy设置的cookie:

curl --cookie-jar cookie.jar http://realuser:realpass@localhost/AuthTest/
Run Code Online (Sandbox Code Playgroud)

cookie.jar文件最终将如下所示:

# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

localhost       FALSE   /       FALSE   1348640978      zknsrv  821aaad0ba34fd51f77b2452c7ae3c182237deb3
Run Code Online (Sandbox Code Playgroud)

但是,401 Not Authorized如果我在没有用户名和密码的情况下提供此会话ID ,我将收到HTTP 失败,如下所示:

curl --cookie 'zknsrv=821aaad0ba34fd51f77b2452c7ae3c182237deb3' http://localhost/AuthTest
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

非常感谢您的帮助.

python authentication cookies session cherrypy

4
推荐指数
1
解决办法
4026
查看次数

Cherrypy出现“不存在'Access-Control-Allow-Origin'标头”错误

我在HTML页面中有以下javascript

<script>
    function getContent(page)
    {
        var xmlhttp;
        if (window.XMLHttpRequest)
            {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();
            }
        else
            {// code for IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
        xmlhttp.onreadystatechange=function()
        {
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
             {
                var json = xmlhttp.responseText;
                obj = JSON.parse(json);
                document.getElementById("content").innerHTML=obj.content;
                document.getElementById("title").innerHTML=obj.title;
             }
        }
    xmlhttp.open("GET","http://differentserver.com:8080?page="+page,true);
    xmlhttp.send();
}
</script>
Run Code Online (Sandbox Code Playgroud)

和一个使用cherrypy的python脚本,该脚本提供JSON,其代码为:

import cherrypy
import json

class ContentGeneratorService(object):
exposed = True
@cherrypy.tools.accept(media='text/plain')
def GET(self, page='home'):
    file_title = open(page + '.title', 'r')
    file_content = open(page + '.content', 'r')
    return json.dumps({"title": file_title.read().replace('\n', …
Run Code Online (Sandbox Code Playgroud)

javascript python json cherrypy

4
推荐指数
1
解决办法
3230
查看次数

无法从外部连接到运行CherryPy服务器的docker容器

我有一个在Docker容器上运行的简单CherryPy服务器,我无法从外部访问它.我用它来运行它docker run -p 8181:8181 image-name.它启动很好,我看到正常的服务器日志.如果我curl localhost:8181从容器内部尝试curl(),我会得到"Hello World"响应.如果我从我的机器上尝试,我会得到curl: (52) Empty reply from server.我究竟做错了什么?我错过了任何配置吗?

服务器代码:

import cherrypy

class HelloWorld(object):
    @cherrypy.expose
    def index(self):
        return "Hello World!"

cherrypy.quickstart(HelloWorld(), '/', {'global': {'server.socket_port': 8181}})
Run Code Online (Sandbox Code Playgroud)

Dockerfile:

FROM python:2.7.13

RUN mkdir -p /opt/server

WORKDIR /opt/server
ADD . /opt/server
VOLUME /opt/server

RUN apt-get update \
&&  apt-get install -y \
    python-setuptools \
    libopenblas-dev \
    gfortran \
    vim \
    curl \
    telnet \
    wget \
&&  pip install --upgrade pip \
&&  pip install …
Run Code Online (Sandbox Code Playgroud)

python cherrypy docker

4
推荐指数
1
解决办法
460
查看次数