【发布时间】:2021-03-16 18:55:37
【问题描述】:
我有一个简单的休息服务,可以让你创建任务。当客户端请求一个任务时——它返回一个唯一的任务编号并开始在一个单独的线程中执行。最简单的实现方式
class Executor:
def __init__(self, max_workers=1):
self.executor = ThreadPoolExecutor(max_workers)
def execute(self, body, task_number):
# some logic
pass
def some_rest_method(request):
body = json.loads(request.body)
task_id = generate_task_id()
Executor(max_workers=1).execute(body)
return Response({'taskId': task_id})
如果我知道一个请求,那么每次创建 ThreadPoolExecutor 和一个(!)工作人员是一个好主意 - 是一个新任务(新线程)。也许值得以某种方式将它们排在队列中?也许最好的选择是每次都创建一个常规流?
【问题讨论】:
-
您的示例看起来可能有一个严重的错误。它返回
Response(...)而无需等待“单独的线程”完成对请求的处理。它甚至可能发生在单独的线程甚至 开始 处理请求之前。这就是你的意思吗?如果没有,那么修复它的最佳方法可能是让线程返回Response(...) -
哦,对不起,当然不是。在下面的评论中写下了我的问题
标签: python-3.x multithreading python-multiprocessing python-multithreading threadpoolexecutor