如何强制芹菜任务在0.5秒内准确执行?

时间:2019-02-08 15:38:33

标签: python django celery celerybeat

我正在做一个芹菜项目。有一个模块(功能)仅在最后一个请求少于0.2秒时才接受请求。敲敲..敲敲..敲敲..我必须总是敲敲功能。其他功能拒绝任何其他请求。

但是在敲门之前,需要根据我数据库中的对象生成一个密钥,并且该密钥与请求一起发送。通常,我生成此密钥的算法需要0.09(约)秒。

重点是设计算法以及学习芹菜。

算法很好。

我最多可以放置1小时(不需要等待结果)(随机)。有时20分钟,30分钟,2小时等。然后它停止了。我已经尝试了好几天才能找到该错误。

我在日志中发现的一件事是,有时需要0.5到1到2.0秒才能生成密钥和放置请求。

此外,我听不懂soft_time_limithard_time_limit。尽管我尝试将soft_time_limit设置为:

@task(queue="knocker", soft_time_limit=0.2)
def knocker():
    #generate_key based on objectsin db and current time.
    knock_knock(key)

我正在使用RedisCelery(最新版本)。我的设置是:

CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Kolkata'
CELERY_IGNORE_RESULT = True
CELERY_BROKER_TRANSPORT_OPTIONS = {
    'fanout_prefix': True,
    'fanout_patterns': True
}

我有4名工人:

celery -A knocker_project worker -Q knocker -P eventlet -c 20

服务器是一台Ubuntu 18.04计算机,具有4GB内存和2个处理器。

我在这里做什么错了?

0 个答案:

没有答案