我正在做一个芹菜项目。有一个模块(功能)仅在最后一个请求少于0.2秒时才接受请求。敲敲..敲敲..敲敲..我必须总是敲敲功能。其他功能拒绝任何其他请求。
但是在敲门之前,需要根据我数据库中的对象生成一个密钥,并且该密钥与请求一起发送。通常,我生成此密钥的算法需要0.09(约)秒。
重点是设计算法以及学习芹菜。
算法很好。
我最多可以放置1小时(不需要等待结果)(随机)。有时20分钟,30分钟,2小时等。然后它停止了。我已经尝试了好几天才能找到该错误。
我在日志中发现的一件事是,有时需要0.5到1到2.0秒才能生成密钥和放置请求。
此外,我听不懂soft_time_limit
和hard_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)
我正在使用Redis
和Celery
(最新版本)。我的设置是:
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个处理器。
我在这里做什么错了?