我知道在 django 项目中使用线程不是最佳实践,但我有一个使用线程的项目:threading.Thread(target=save_data, args=(dp, conv_handler)).start()
我想将此代码替换为芹菜 - 使用函数
运行 workersave_data(dispatcher, conversion)
在save_data里面我有无限循环,在这个循环中,我将dispatcher
和conversation
的状态保存到带有 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 更匹配的解决方案(尝试成为无状态的快速任务(。