我使用celery来更新新闻聚合站点中的RSS feed。我为每个提要使用一个@task,看起来一切正常。
有一个细节我不确定如何处理:所有提要每分钟都使用@periodic_task更新一次,但是如果提要在开始新任务时仍从上一个定期任务更新,该怎么办?(例如,如果Feed确实很慢或离线,并且任务在重试循环中进行)
目前,我存储任务结果并按以下方式检查其状态:
import socket
from datetime import timedelta
from celery.decorators import task, periodic_task
from aggregator.models import Feed
_results = {}
@periodic_task(run_every=timedelta(minutes=1))
def fetch_articles():
for feed in Feed.objects.all():
if feed.pk in _results:
if not _results[feed.pk].ready():
# The task is not finished yet
continue
_results[feed.pk] = update_feed.delay(feed)
@task()
def update_feed(feed):
try:
feed.fetch_articles()
except socket.error, exc:
update_feed.retry(args=[feed], exc=exc)
也许我错过了一些使用celery机制来实现相同结果的更复杂/更可靠的方法?
可以使用这样的装饰器:
def single_instance_task(timeout):
def task_exc(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
lock_id = "celery-single-instance-" + func.__name__
acquire_lock = lambda: cache.add(lock_id, "true", timeout)
release_lock = lambda: cache.delete(lock_id)
if acquire_lock():
try:
func(*args, **kwargs)
finally:
release_lock()
return wrapper
return task_exc
然后,像这样使用它…
@periodic_task(run_every=timedelta(minutes=1))
@single_instance_task(60*10)
def fetch_articles()
yada yada...
此函数返回输入数组中的唯一元素数组。 该函数可以返回唯一值数组的数组和关联索引数组。 索引的性质取决于函数调用中返回参数的类型。 numpy.unique(arr, return_index, return_inverse, return_counts) Where, Sr.No. 参数和描述 1 arr 输入数组。 如果不是一维阵列,将会变平 2 return_index 如果为True,则返
UNIQUE The codebase for Uncertainty-aware blind image quality assessment in the laboratory and wild (TIP2021)and Learning to blindly assess image quality in the laboratory and wild (ICIP2020) Prequisi
Contents Running Graphs Session management class tf.Session class tf.InteractiveSession tf.get_default_session() Error classes class tf.OpError class tf.errors.CancelledError class tf.errors.UnknownEr
In this guide we are going to explain how to generate documentation for your application and how to tune it to your liking. phpDocumentor supports a wide range of options related to the generation of
IntelliJ提供了多种创建配置的方法。 本章讨论创建临时永久配置的选项。 它还讨论了在其他用户之间共享配置的方法。 创建临时配置 运行或调试Java类或测试用例时会创建临时配置。 请考虑以下步骤以了解其工作原理 - 创建一个Java类。 右键单击它并选择“运行”选项。 第一次运行后,临时配置将添加到运行菜单中。 创建永久配置 通过使用IntelliJ保存临时配置,可以将其转换为永久配置。 要保
Running Life(开源)是基于HealthKit和高德地图开发的健康跑步助手。 效果图 功能 .动态绘制跑步路径 智能判别跑步状态. 记录跑步数据生成分享小卡片、微信分享 条形图展示消耗卡路里 技术 MVVM架构 基于高德地图实现动态绘制轨迹 CMMotionManager判断跑步状态 贝塞尔曲线与帧动画 CoreData HealthKit 现状 项目处于不断完善和重构当中,目