gpt4 book ai didi

c# - 限制对远程 api 的并行请求

转载 作者:行者123 更新时间:2023-11-30 12:52:59 24 4
gpt4 key购买 nike

我正在开发一个使用 Google Maps Geocoding API 的 ASP.NET MVC 应用程序。在一个批处理中,最多可能有 1000 个查询要提交给地理编码 API,因此我尝试使用并行处理方法来提高性能。负责为每个核心启动一个进程的方法是:

public void GeoCode(Queue<Job> qJobs, bool bolKeepTrying, bool bolSpellCheck, Action<Job, bool, bool> aWorker)
{
// Get the number of processors, initialize the number of remaining
// threads, and set the starting point for the iteration.
int intCoreCount = Environment.ProcessorCount;
int intRemainingWorkItems = intCoreCount;

using(ManualResetEvent mreController = new ManualResetEvent(false))
{
// Create each of the work items.
for(int i = 0; i < intCoreCount; i++)
{
ThreadPool.QueueUserWorkItem(delegate
{
Job jCurrent = null;

while(qJobs.Count > 0)
{
lock(qJobs)
{
if(qJobs.Count > 0)
{
jCurrent = qJobs.Dequeue();
}
else
{
if(jCurrent != null)
{
jCurrent = null;
}
}
}

aWorker(jCurrent, bolKeepTrying, bolSpellCheck);
}

if(Interlocked.Decrement(ref intRemainingWorkItems) == 0)
{
mreController.Set();
}
});
}

// Wait for all threads to complete.
mreController.WaitOne();
}
}

这是基于我在 Microsoft's parallel computing web site 上找到的模式文档.问题是 Google API 的 QPS 限制为 10(企业客户)——这是我遇到的问题——然后我收到 HTTP 403 错误。这是我可以从并行处理中受益但限制我发出的请求的方式吗?我试过使用 Thread.Sleep 但它并没有解决问题。非常感谢任何帮助或建议。

最佳答案

听起来您缺少某种飞行中的最大参数。您需要根据作业的完成来限制您的提交,而不仅仅是在队列中有作业时循环。

看起来你的算法应该像下面这样:

submit N jobs (where N is your max in flight)

Wait for a job to complete, and if queue is not empty, submit next job.

关于c# - 限制对远程 api 的并行请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3248992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com