如何将 Django 中的线程替换为 Celery worker



我知道在 django 项目中使用线程不是最佳实践,但我有一个使用线程的项目:
threading.Thread(target=save_data, args=(dp, conv_handler)).start()

我想将此代码替换为芹菜 - 使用函数
运行 workersave_data(dispatcher, conversion)

在save_data里面我有无限循环,在这个循环中,我将dispatcherconversation的状态保存到带有 pickle 的磁盘上。

我想知道我可以用芹菜做这样的工作吗? 工作人员是否可以在调度程序和对话中看到状态更改?

我个人不喜欢在 Celery 中长时间运行的任务。通常,您将有一个最长的任务时间,如果您的任务花费太多时间,它可能会超时。芹菜的最佳任务是快速和无状态的任务。

请注意,Celery 参数在启动任务时是序列化的,将 python 对象作为任务参数传递很棘手(不推荐(。

我需要有关您尝试解决的问题的更多信息,但如果调度程序和转换是 django 对象,我会做这样的事情:

def save_data(dispatcher_id, conversion_id):
dispatcher = Dispatcher.objects.get(id=dispatcher_id)
conversion = Conversion.objects.get(id_conversion_id)

你应该避免芹菜任务中的无限循环。您可以通过定期调用此save_task来解决无限循环,但我鼓励您找到与 Celery 更匹配的解决方案(尝试成为无状态的快速任务(。

相关内容

  • 没有找到相关文章

最新更新