我有一个使用的子进程来完成大部分的工作,为请求瓶的应用。 对于返回单个响应的路线,我这样做有什么下文。
@route('/index')
def index():
worker = getWorker()
return worker.doStuff()
我的一个途径需要一个数据流。 我不能想出一个聪明的办法让工人返回响应流。 下面的例子是类似于我想做的事情,只是没有一个工人。
@route('/stream')
def stream():
yield 'START'
sleep(3)
yield 'MIDDLE'
sleep(5)
yield 'END'
我希望能够做到像下面。 既然不能产生/返回一个发电机,这是不可能这样。
@route('/stream')
def stream():
worker = getWorker()
yield worker.doStuff()
class worker:
# Remember, this is run in a subprocess in real life.
def doStuff():
yield 'START'
sleep(3)
yield 'MIDDLE'
sleep(5)
yield 'END'
这是一个大项目,我没有在我的做事方式的灵活性。 我知道有时候最简单的答案是“你的设计是错误的。” 在这种情况下,虽然,我有一些限制,超出我的控制(路线必须是一个数据流和工作都必须由一个子进程来完成)。
编辑我也不能有doStuff()块。 我希望能够创造这样一个GEVENT队列,我回来,有工作进程。 现在的问题是,它似乎并不像我可以使用gevent.queue和,一起处理。
@route('/stream')
def index():
body = gevent.queue.Queue()
worker = multiprocessing.Process(target=do_stuff, args=body)
worker.start()
return body()
def do_stuff(body):
while True:
gevent.sleep(5)
body.put("data")