我有这个方法:
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。