我有 Django 视图:
def func():
...
instance = ...create()
func2(instance)
instance.attr = attr
etc...
因此 func() 创建一个实例,调用 func2() 并继续工作。
def func2(instance):
request = request(instance)
wait response
response.data.save()
函数 1 和函数 2 的结果没有任何关系。功能2与输出/输入操作相关。函数2必须被函数1调用,并且不能阻塞函数1的运行。在当前项目版本中,func2是用celery调用的。但我不确定这是否是正确的方法,最好用另一个线程调用 func2 。
def func():
...
instance = ...create()
thread = threading.Thread(target=func2, args=instance)
thread.run()
instance.attr = attr
etc...
我说得对吗?非常感谢!
使用 celery 任务并等待他们的响应(celery 支持这一点)并且它更干净。
如果你不能使用 celery 或其他一些异步包,那么重新设计你的设计/需求。
我会避免任何多线程。它总是会以某种方式回来咬我。