我有一个python flask服务器,其中的一个端点要完成少量工作(实际代码读取,调整大小并返回图像)。我想优化端点,以便可以并行调用多次。
我当前拥有的代码(如下所示)不起作用,因为它依赖于通过$feedbacks = getFeedbacks();
if(count($feedbacks)>0){
foreach($feedbacks as $feedback){
$getData($feedback->order_id);
}
}
function getData($orderId)
{
$orderId = $orderId;
$api = "api address here";
$curl = curl_init($api);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$curl_response = curl_exec($curl);
$json = json_decode($curl_response);
}
传递multiprocessing.Event
对象,这是不允许的,并导致以下错误:
multiprocessing.JoinableQueue
如何使用单独的过程来计算一些作业,并在完成特定作业后通知主线程?
烧瓶可以是多线程的,因此,如果一个请求正在等待结果,则其他线程可以继续处理其他请求。我在这里有一个基本的概念证明,表明可以使用多重处理来优化并行请求:https://github.com/alanbacon/flask_multiprocessing
github上的示例代码为我理解的每个请求都产生了一个新过程,该过程具有相当大的开销,另外,我注意到如果有10个或20个以上的并发请求,我的概念验证服务器就会崩溃,我怀疑这是因为产生了太多的进程。
我试图创建一组从队列中挑选作业的工人。作业完成后,结果将写入共享存储区。每个作业都包含要完成的工作和一个RuntimeError: Condition objects should only be shared between processes
through inheritance
对象,可以在作业完成时设置该对象以向主线程发出信号。
每个请求线程通过一个带有新创建的Event
对象的作业,然后立即等待该事件再返回结果。在一个服务器请求线程正在等待时,服务器可以使用其他线程继续服务其他请求。
如上所述,问题是Event
对象无法以这种方式传递。
我应该采取什么方法来解决这个问题?
Event