默认的CherryPy路由样式基于带有方法的类的实例@cherrypy.expose.
在下面的示例中,这些URL是通过对其他普通类进行简单调整来提供的.
/
/hello
/hello/again
/bye
/bye/again
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法使用Flask的@route或其他一些装饰器来实现这一点.
import cherrypy
class Root(object):
@cherrypy.expose
def index(self):
return 'my app'
class Greeting(object):
def __init__(self, name, greeting):
self.name = name
self.greeting = greeting
@cherrypy.expose
def index(self):
return '%s %s!' %(self.greeting, self.name)
@cherrypy.expose
def again(self):
return '%s again, %s!' %(self.greeting, self.name)
if __name__ == '__main__':
root = Root()
root.hello = Greeting('Foo', 'Hello')
root.bye = Greeting('Bar', 'Bye')
cherrypy.quickstart(root)
Run Code Online (Sandbox Code Playgroud) 我正在尝试运行多个进程,同时使用它concurrent.futures.ProcessPoolExecutor来运行CPU密集型作业.前几个请求很愉快,但随后KeyError提出了一个请求concurrent.futures.process,服务器挂起.
这是龙卷风中的一个错误吗?
这是我删除代码的最简单形式.
服务器:
# -*- coding: utf-8 -*-
"""
server runs 2 processes and does job on a ProcessPoolExecutor
"""
import tornado.web
import tornado.ioloop
import tornado.gen
import tornado.options
import tornado.httpserver
from concurrent.futures import ProcessPoolExecutor
class MainHandler(tornado.web.RequestHandler):
executor = ProcessPoolExecutor(1)
@tornado.gen.coroutine
def post(self):
num = int(self.request.body)
result = yield self.executor.submit(pow, num, 2)
self.finish(str(result))
application = tornado.web.Application([
(r"/", MainHandler),
])
def main():
tornado.options.parse_command_line()
server = tornado.httpserver.HTTPServer(application)
server.bind(8888)
server.start(2)
tornado.ioloop.IOLoop.instance().start()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
客户: …
python concurrency tornado multiprocessing concurrent.futures