python cherrypy:如何开始长背景(可停止)tas

2024-05-17 19:44:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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会话)并且服务器可以随时停止的长后台任务?在


Tags: 方法服务器apirestfuljsonhttp情况端点