Python 如何将Django中的线程替换为芹菜工人

Python 如何将Django中的线程替换为芹菜工人,python,django,celery,Python,Django,Celery,我知道在django项目中使用线程不是最佳实践,但我有一个使用线程的项目: threading.Thread(target=save_data,args=(dp,conv_handler)).start() 我想将此代码替换为芹菜-使用函数运行worker 保存数据(调度程序、转换) 在save_data中,我有一个无限循环,在这个循环中,我将dispatcher和conversation的状态保存到带有pickle的磁盘上 我想知道我可以用芹菜做这样的工作吗? 工作人员是否可以在调度程序和对话

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

我想将此代码替换为芹菜-使用函数运行worker
保存数据(调度程序、转换)

在save_data中,我有一个无限循环,在这个循环中,我将
dispatcher
conversation
的状态保存到带有pickle的磁盘上

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

我个人不喜欢芹菜中长时间运行的任务。通常情况下,你会有一个最长的任务时间,如果你的任务需要太多时间,它可能会超时。芹菜最好的任务是快速和无状态任务

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

我需要有关您试图解决的问题的更多信息,但如果dispatcher&conversion是django对象,我会执行以下操作:

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

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

不,这不是数据库对象。dispatcher和conversation是python对象。我想保持他们的状态,但我真的不知道如何做得更好。我在这里共享了代码,所以我不建议您使用芹菜来完成此任务。你应该尝试不同的方法。您可以使用芹菜将数据写入磁盘文件,但仍然需要一个无限期侦听传入事件的事件循环