flask_restful 接口第一次收到post消息后异步启动一个死循环进程,第二次收到post消息根据进程号停掉这个死循环进程
时间: 2023-12-03 08:04:46 浏览: 89
依次启动不同进程的例子
5星 · 资源好评率100%
在 Flask-RESTful 中,可以使用 Flask 自带的 `request` 模块获取 POST 请求体中的数据,使用 Python 的 `threading` 模块创建并启动异步线程,使用全局变量控制线程的启动和停止,同时记录进程号,方便后续根据进程号停止线程。
以下是一个示例代码,可以实现在接收到第一次 POST 请求时启动一个死循环进程,并记录进程号,接收到第二次 POST 请求时根据进程号停止该进程:
```python
from flask import Flask, request
from flask_restful import Api, Resource
import threading
import time
app = Flask(__name__)
api = Api(app)
# 全局变量,用于控制线程的启动和停止
running = False
thread = None
class MyResource(Resource):
def post(self):
global running, thread
# 获取 POST 请求体中的数据
data = request.get_json()
if not running:
# 第一次 POST 请求,启动死循环进程,并记录进程号
running = True
thread = threading.Thread(target=loop)
thread.start()
pid = thread.ident
return {'message': 'loop started', 'pid': pid}
else:
# 第二次 POST 请求,根据进程号停止死循环进程
pid = data['pid']
if thread is not None and thread.ident == pid:
running = False
return {'message': 'loop stopped'}
else:
return {'message': 'no such process'}
def loop():
while running:
print('looping...')
time.sleep(1)
api.add_resource(MyResource, '/')
if __name__ == '__main__':
app.run(debug=True)
```
在上述代码中,我们定义了一个 `MyResource` 类,继承了 `Resource` 类。当接收到 POST 请求时,如果 `running` 为 `False`,则启动死循环进程,并记录进程号;如果 `running` 为 `True`,则根据进程号停止死循环进程。在死循环进程中,我们每隔 1 秒钟打印一条信息。
需要注意的是,在实际使用中需要根据具体需求修改 `loop` 函数中的代码。另外,该代码仅供参考,实际情况可能需要根据具体需求进行修改。
阅读全文