Gevent,http/cgi non blocking server



我有这个方法:

class dJobs():
    def server(self):
        address = ('127.0.0.1', dConfig.cgiport)
        handler = CGIHTTPServer.CGIHTTPRequestHandler
        handler.cgi_directories = ['/cgi-bin']
        self.logger.info("starting http server on port %s" %str(port))
        httpd = BaseHTTPServer.HTTPServer(address, handler)
        httpd.serve_forever()
    def job(self):
        self.runNumber = 0
        while True:
            self.logger.info("Counting: %s" %str(self.runNumber))
            self.runNumber+=1
            time.sleep(1)

我想在等待 http 和 cgi 请求的同时运行作业,处理请求,然后继续作业方法。是否可以使用 gevent(以及如何)执行此操作,或者我需要使用线程?

即我想同时运行这两种方法而不创建线程。

这个解决方案似乎对我有用:

  • 进口猴子:

    from gevent import monkey
    monkey.patch_all(thread=False)
    
  • 添加并运行此方法:

    def run(self):
       jobs = [gevent.spawn(self.server),gevent.spawn(self.job)]
       gevent.joinall(jobs)
    

请在您的程序中试用一下。

如果你的作业是 CPU 密集型的,则由于 GIL 的原因,你一定不能使用 Python 线程。替代方案是多处理模块。

你也可以使用uWSGI——它可以做CGI和运行作业。看看WSGI,这是uWSGI的主要功能,你可能想使用它而不是CGI。

最新更新