我有个问题,那Django可以做多线程吗?Can Django可以做多线程工作吗?
下面是我想要做的:点击网页上的按钮,然后在model.py中有一些函数开始运行,例如,从Internet上抓取一些数据,完成后返回给用户结果。
我不知道,我要开一个新的线程在model.py执行的功能,有谁能够告诉我该怎么办呢?非常感谢你。
我有个问题,那Django可以做多线程吗?Can Django可以做多线程工作吗?
下面是我想要做的:点击网页上的按钮,然后在model.py中有一些函数开始运行,例如,从Internet上抓取一些数据,完成后返回给用户结果。
我不知道,我要开一个新的线程在model.py执行的功能,有谁能够告诉我该怎么办呢?非常感谢你。
这里是你描述的一个例子。
User sends request
Django receives => spawns a thread to do something else.
main thread finishes && other thread finishes
... (later upon completion of both tasks)
response is sent to user as a package.
更好的办法:
User sends request
Django receives => lets Celery know "hey! do this!"
main thread finishes
response is sent to user
...(later)
user receives balance of transaction
芹菜是许多用途的矫枉过正。请停止推荐它作为任何需要不阻止请求/响应的魔术项目。这就像每当有人询问如何存储一行文本时推荐RDBMS一样。 –
@andybak随意建议一个替代方案。对我来说,这听起来像是一种合法用途。 – cwallenpoole
取决于细节,但你可以只产生一个线程和轮询后,您可以使用检查任务的一个简单的cron作业,或者如果你需要更多的功能,你可以用几个“不一样复杂芹菜”一诸如huey或django-background-tasks之类的项目。 –
如果你不想一些矫枉过正的框架添加到您的项目中,你可以简单地使用subprocess.Popen:
def my_command(request):
command = '/my/command/to/run' # Can even be 'python manage.py somecommand'
subprocess.Popen(command, shell=True)
return HttpResponse(status=204)
什么是你想完成?也许你可以做到这一点的前端TECNOLOGIES如AJAX,WebSocket的,魔术小马... – gipi
什么是魔术小马?在谷歌找不到它... –