Django rest framework 优化循环生成django rest框架请求

Django rest framework 优化循环生成django rest框架请求,django-rest-framework,python-multiprocessing,Django Rest Framework,Python Multiprocessing,我有一个遍历数组的for循环。对于数组中的每个项,它调用一个函数,该函数发出django rest框架请求。每个函数调用都独立于其他函数调用 如果阵列有25个项目,则当前需要30秒才能完成。我试图把总时间缩短到10秒以内 花在函数中的时间有一半被DRF请求占用。用多处理池替换for循环有意义吗?如果是这样,我如何确保每个进程使用requests包通过单独的连接发出请求 我试着替换: 与: 由于OpenSSL.SSL.Error而失败:[('SSL例程','ssl3_get_记录','decryp

我有一个遍历数组的for循环。对于数组中的每个项,它调用一个函数,该函数发出django rest框架请求。每个函数调用都独立于其他函数调用

如果阵列有25个项目,则当前需要30秒才能完成。我试图把总时间缩短到10秒以内

花在函数中的时间有一半被DRF请求占用。用多处理池替换for循环有意义吗?如果是这样,我如何确保每个进程使用requests包通过单独的连接发出请求

我试着替换:

与:

由于OpenSSL.SSL.Error而失败:[('SSL例程','ssl3_get_记录','decryption failed or bad record mac')]


根据,该错误是由于在多个进程中重新使用相同的SSL连接造成的

您可以使用可以执行并行任务的
并发
python模块()。返回响应对象列表的示例方法:

from concurrent import futures

def execute_all(scenario_ids, num_workers=5):
    '''
    Method to make parallel API calls
    '''
    with futures.ThreadPoolExecutor(max_workers=num_workers) as executor:
        return [result for result in executor.map(step_scenario_partial, scenario_ids)]

ThreadPoolExecutor
使用线程池执行异步并行调用。您可以尝试使用num_workers的值(从5开始),以确保总执行时间为。线程是否会避免由于重复使用相同的SSL连接而导致的错误,因为线程从不并发执行?请尝试您的建议。时间下降到8.3秒,没有错误。
pool = Pool(processes=2)
pool.map(step_scenario_partial, scenario_ids)
from concurrent import futures

def execute_all(scenario_ids, num_workers=5):
    '''
    Method to make parallel API calls
    '''
    with futures.ThreadPoolExecutor(max_workers=num_workers) as executor:
        return [result for result in executor.map(step_scenario_partial, scenario_ids)]