防止 python 泛洪服务器与任务从 for 循环



我有一个每晚运行的任务,从外部系统更新用户。如何防止我的服务器用请求淹没外部系统?

我的代码:

@task()
def update_users():
    #Get all users
    users = User.objects.all()
    for userobject in users:
        #send to update task:            
        update_user.apply_async(args=[userobject.username,], countdown=15)

有没有办法"减慢"for循环,或者如果已经有一个任务正在运行,是否有可能使芹菜不执行任务?

首先,您需要指定"泛洪"服务的确切含义。是不是许多请求最终同时被触发到一台服务器?如果是这种情况,一种常见的模式实际上是应用一个固定大小为 N 的工人。使用此方法可以保证最多同时查询 N 个请求。也就是说,在任何时间点,未完成的请求都不会超过 N 个。这有效地限制了您的请求速率。

然后,您可以使用 N 并进行一些基准测试,看看在您的特定情况下哪个数字是合理的。

您可以在任务上使用锁,强制它一次只对整个工作线程池执行一次。你可以检查这个芹菜食谱。

放置 time.sleep 对您没有帮助,因为这些任务可能会同时执行,例如队列中是否有一些延迟。

1你可以使用 time.sleep 来延迟你的任务

import time
@task()
def update_users():
#Get all users
users = User.objects.all()
for userobject in users:
    #send to update task:            
    update_user.apply_async(args=[userobject.username,], countdown=15)
    time.sleep(1)

这会将 for 循环延迟 1 秒

相关内容

  • 没有找到相关文章

最新更新