GAE - 将任务添加到队列的最快方法是什么?为什么这看起来这么慢?
GAE - What is the fastest way to add tasks to queue? Why does this appear to be so slow?
我正在使用 Google App Engine (Python) 实时处理一些事件消息。简而言之,我有 100 多个任务需要在收到消息时快速 运行。我尝试了几种方法(延迟库、线程),我认为最好的解决方案是使用任务队列并异步添加这些任务到我想要的队列。这是我正在做的一个例子。
tasks = []
task = Task(url=url_for('main.endpoints_worker'),params={'id': id})
tasks.append(task.add_async(queue_name='event-message'))
for task in tasks:
task.get_result()
当我这样做时,我的大部分时间都花在了将这些任务添加到队列中。有没有办法加快速度?有没有更好的方法?
老实说,我每次 运行 的时候都会有很大的不同。有时我在 100 毫秒左右(这很好)但其他时候我在 1 秒左右。
我原以为分散工作会更快,但批量添加到任务队列会执行。下面是我所看到的建议方法:
tasks = [Task(url=url_for('main.endpoints_worker'),params={'id': id}) for id in id_list]
rpc = Queue('event-message').add_async(tasks)
rpc.get_result()
更新:由于添加到队列时有 100 个任务限制,我需要再次检查这个问题。
通过批量创建任务(每组 100 个),我大大提高了代码的吞吐量,但我仍然不明白为什么将多组任务添加到队列中速度会如此之快。一项任务 queue.add_async 运行s < 40ms 没问题。当我做 2 次或更多次 queue.add_async 时,时间会变慢。我很想知道为什么?另外我该如何解决这个问题?
当我在没有异步的情况下添加批量任务时,它们每个都需要 < 40 毫秒。为什么在使用 async 时它们会花费更长的时间?
另一个更新 我认为这个问题可能与争用有关,但即使我将这些任务中的每一个添加到不同的队列中,我也会得到相同的结果。
您可以通过批量排队任务来节省大量时间。像下面这样的东西应该适合你:
tasks = [Task(url=url_for('main.endpoints_worker'),params={'id': id}) for id in id_list]
rpc = Queue('event-message').add_async(tasks)
rpc.wait()
请注意,您不能使用延迟库批量提交任务。
我正在使用 Google App Engine (Python) 实时处理一些事件消息。简而言之,我有 100 多个任务需要在收到消息时快速 运行。我尝试了几种方法(延迟库、线程),我认为最好的解决方案是使用任务队列并异步添加这些任务到我想要的队列。这是我正在做的一个例子。
tasks = []
task = Task(url=url_for('main.endpoints_worker'),params={'id': id})
tasks.append(task.add_async(queue_name='event-message'))
for task in tasks:
task.get_result()
当我这样做时,我的大部分时间都花在了将这些任务添加到队列中。有没有办法加快速度?有没有更好的方法?
老实说,我每次 运行 的时候都会有很大的不同。有时我在 100 毫秒左右(这很好)但其他时候我在 1 秒左右。
我原以为分散工作会更快,但批量添加到任务队列会执行。下面是我所看到的建议方法:
tasks = [Task(url=url_for('main.endpoints_worker'),params={'id': id}) for id in id_list]
rpc = Queue('event-message').add_async(tasks)
rpc.get_result()
更新:由于添加到队列时有 100 个任务限制,我需要再次检查这个问题。 通过批量创建任务(每组 100 个),我大大提高了代码的吞吐量,但我仍然不明白为什么将多组任务添加到队列中速度会如此之快。一项任务 queue.add_async 运行s < 40ms 没问题。当我做 2 次或更多次 queue.add_async 时,时间会变慢。我很想知道为什么?另外我该如何解决这个问题?
当我在没有异步的情况下添加批量任务时,它们每个都需要 < 40 毫秒。为什么在使用 async 时它们会花费更长的时间?
另一个更新 我认为这个问题可能与争用有关,但即使我将这些任务中的每一个添加到不同的队列中,我也会得到相同的结果。
您可以通过批量排队任务来节省大量时间。像下面这样的东西应该适合你:
tasks = [Task(url=url_for('main.endpoints_worker'),params={'id': id}) for id in id_list]
rpc = Queue('event-message').add_async(tasks)
rpc.wait()
请注意,您不能使用延迟库批量提交任务。