我使用cherrypy在python中构建了一个restful服务,默认情况下是多线程的。因此,两个不同的http会话不会互相阻塞。在
对于给定的API端点,我需要一种方法来启动一个可以随时停止的长(非阻塞)后台任务。实际上,我正在使用一个新线程来运行任务,它允许用户向服务器发送其他请求,而无需等待长任务完成。不幸的是,我还需要一种随时停止后台任务的方法,似乎我无法从主线程停止新线程(我是对的吗?)。在
@cp.expose
@cp.tools.json_in()
@cp.tools.json_out()
class LongTaskEndpoint(object):
def GET(self):
thread = Thread(target=longRunningTask, args=())
thread.start()
return {"message" : "Long task started"}
我尝试了multiprocessing进程而不是线程,但这似乎阻塞了主线程(在后台任务完成之前,客户端无法从服务器获得任何响应):
^{pr2}$如何启动一个不阻塞主线程(对于每个http会话)并且服务器可以随时停止的长后台任务?在
目前没有回答
相关问题 更多 >
编程相关推荐