芹菜任务,运行更多的任务
我正在使用celerybeat来启动一系列辅助任务的主要任务。 我已经完成了两项任务。
有没有办法轻松做到这一点? Celery是否允许从任务内运行任务?
我的例子:
@task def compute(users=None): if users is None: users = User.objects.all() tasks = [] for user in users: tasks.append(compute_for_user.subtask((user.id,))) job = TaskSet(tasks) job.apply_async() # raises a IOError: Socket closed @task def compute_for_user(user_id): #do some stuff
compute
从celerybeat调用,但是当它尝试运行apply_async
时会导致IOError。 有任何想法吗?
回答开放性问题:从版本2.0开始,Celery提供了一个简单的方法来启动其他任务的任务。 你所称的“次要任务”就是所谓的“子任务”。 请参阅@Paperino适合链接的任务,子任务和callback集文档。
对于版本3.0,芹菜更改为使用组和其他types的行为。
你的代码显示你已经熟悉了这个接口。 你的实际问题似乎是,“当我尝试运行我的子任务集时,为什么会得到'套接字closures' IOError
? 我不认为有人可以回答,因为你没有提供足够的关于你的程序的信息。 您的摘录不能按原样运行,所以我们无法检查您自己的问题。 请发布随IOError
一起提供的堆栈跟踪,如果运气好的话,那些可以帮助你的人也会出现。
你可以使用这样的东西(支持3.0)
g = group(compute_for_user.s(user.id) for user in users) g.apply_async()
而从3.0版开始,“TaskSet”不再是这个词了…作为特殊types的子任务,Groups,Chains和Chords是新事物,参见http://docs.celeryproject.org/en/3.1/whatsnew-3.0的;.html#组和弦链是-现在,子任务
- 正确使用Task.Run时,只是asynchronous等待
- Timer和TimerTask与Java中的Thread + sleep
- 从Android应用程序安装程序和主屏幕启动应用程序时的活动堆栈sorting问题
- 在OnlyOnFaulted Continuation中等待任务会导致AggregateException
- C# – 线程池与任务
- 在任务exception的情况下,根据用户input多次重试任务
- 我的C#应用程序返回0xE0434352到Windows任务计划程序,但它不会崩溃
- OperationCanceledException和TaskCanceledException之间的区别?
- Android:取消asynchronous任务