与我在这里搜索的所有其他类似解决方案相比,我的问题似乎有点复杂。
我在我的views.py中开发了三个不同的函数作为三个不同的API。假设我有16 GB和8核的机器可用。我想为每个API创建三个单独的池,这样Pool-1 (对于API-1)被分配了4个核心(如果可能的话,还有8 GB),Pool-2被分配了2个核心(4 GB),Pool-3被分配了剩余的2个核心(以及剩余的4 GB )。
现在假设用户A请求API-1 (位于Pool-1中)。请求一发出,我就不想等待它完成,只想存储进程id。现在,如果用户B在API-1的几个小时后发出请求,但是Pool-1中的所有4个核心都已经在运行,它将等待任何一个完成,并且基本上进入队列-1(对于Pool-1),即使Pool-2和Pool-3的核心可用。
因此,三个独立的池在同一台机器上管理三个不同的API。下面是我正在尝试实现的views.py的粗略代码。
from multiprocessing import Pool
pool1 = Pool(processes=4) #defining outside so as to keep the same pool for all users for mulitple requests
pool2 = Pool(processes=2)
pool3 = Pool(processes=2)
def function1(params):
code goes here...
def function2(params):
code goes here...
def function3(params):
code goes here...
@api_view(["POST"])
def api_1(request):
if request.method == 'POST':
pool1.map(function1, request.data['params'])
#store process id here in a database
return HttpResponse("SUCCESS")
@api_view(["POST"])
def api_2(request):
if request.method == 'POST':
pool2.map(function2, request.data['params'])
return HttpResponse("SUCCESS")
@api_view(["POST"])
def api_3(request):
if request.method == 'POST':
pool3.map(function3, request.data['params'])
return HttpResponse("SUCCESS")这是可以实现的,甚至是建议的吗?如果不是这样,什么是实现它的更好的方法。
谢谢你的帮忙!
发布于 2021-06-26 02:11:54
这可以通过PBS Torque、Oracle Grid Engine或Slurm等调度器来完成。您可以创建队列并向这些队列提交作业,并检查作业是否完成。
https://stackoverflow.com/questions/68131374
复制相似问题