运行python函数的最佳方法,该函数在父级死亡时保持活动状态
我有一组python脚本,在发布时从Django视图启动,需要在后台运行,而Django服务器显示下一页 我目前正在尝试使用运行python函数的最佳方法,该函数在父级死亡时保持活动状态,python,django,django-views,multiprocessing,Python,Django,Django Views,Multiprocessing,我有一组python脚本,在发布时从Django视图启动,需要在后台运行,而Django服务器显示下一页 我目前正在尝试使用多处理.Process来实现这一点。我的代码看起来像: 视图.py from myscripts.installer import foo a = multiprocessing.Process(target=foo, args=(bar,), kwargs={'lorem':ipsum,}) a.start() ... return HttpResponse("Insta
多处理.Process
来实现这一点。我的代码看起来像:
视图.py
from myscripts.installer import foo
a = multiprocessing.Process(target=foo, args=(bar,), kwargs={'lorem':ipsum,})
a.start()
...
return HttpResponse("Installation started...")
但是在脚本中输入以下错误几行:ValueError:I/O操作关闭的文件
我假设这是因为“父”进程(Django视图)通过返回HttpResponse退出,因此它的stdin/out/err被关闭,而子进程没有要写入的内容(只是猜测,我对多处理是新手)
从父函数的其他脚本运行函数并让它们在父函数死亡/退出后继续运行的最佳/最具python风格的方法是什么?我不能说这是最好的方法,但一种非常常见的方法是使用像这样的后台任务管理器。我过去亲自用过芹菜,发现它很适合我们的需要
使用芹菜可以很容易地将任何给定的函数转换为“后台”任务,只要方便就可以运行(即使在不同的机器上)。主要缺点(与您正在尝试的相比)是,您需要使用数据存储(例如MySQL或RabbitMQ)、芹菜工人等来设置一个完整的单独服务。我不能说这是最好的方法,但一种非常常见的方法是使用类似的后台任务管理器。我过去亲自用过芹菜,发现它很适合我们的需要
使用芹菜可以很容易地将任何给定的函数转换为“后台”任务,只要方便就可以运行(即使在不同的机器上)。主要缺点(与您正在尝试的相比)是,您需要使用数据存储(例如MySQL或RabbitMQ)、芹菜工人等来设置一个完整的单独服务。我不能说这是最好的方法,但一种非常常见的方法是使用类似的后台任务管理器。我过去亲自用过芹菜,发现它很适合我们的需要
使用芹菜可以很容易地将任何给定的函数转换为“后台”任务,只要方便就可以运行(即使在不同的机器上)。主要缺点(与您正在尝试的相比)是,您需要使用数据存储(例如MySQL或RabbitMQ)、芹菜工人等来设置一个完整的单独服务。我不能说这是最好的方法,但一种非常常见的方法是使用类似的后台任务管理器。我过去亲自用过芹菜,发现它很适合我们的需要
使用芹菜可以很容易地将任何给定的函数转换为“后台”任务,只要方便就可以运行(即使在不同的机器上)。主要缺点(与您正在尝试的相比)是,您需要使用数据存储(例如MySQL或RabbitMQ)、芹菜工人等设置一个完整的单独服务。直接基于请求启动流程听起来不是一个好主意。最好创建一个独立的服务来接管运行脚本的工作,并可选地提供某种类型的结果报告
此服务通常与django/httpd服务器并行启动,但运行完全独立。在django代码中,您需要与该服务通信。有许多不同的方法可以实现这一点:直接通过本地端口、队列、命名管道、DBU等进行通信,或者间接地通过数据库进行通信,例如,服务将轮询数据库以进行更改。只能确保通信通道在多个并行操作中正常工作,并且不会成为瓶颈。直接基于请求启动流程听起来不是个好主意。最好创建一个独立的服务来接管运行脚本的工作,并可选地提供某种类型的结果报告
此服务通常与django/httpd服务器并行启动,但运行完全独立。在django代码中,您需要与该服务通信。有许多不同的方法可以实现这一点:直接通过本地端口、队列、命名管道、DBU等进行通信,或者间接地通过数据库进行通信,例如,服务将轮询数据库以进行更改。只能确保通信通道在多个并行操作中正常工作,并且不会成为瓶颈。直接基于请求启动流程听起来不是个好主意。最好创建一个独立的服务来接管运行脚本的工作,并可选地提供某种类型的结果报告
此服务通常与django/httpd服务器并行启动,但运行完全独立。在django代码中,您需要与该服务通信。有许多不同的方法可以实现这一点:直接通过本地端口、队列、命名管道、DBU等进行通信,或者间接地通过数据库进行通信,例如,服务将轮询数据库以进行更改。只能确保通信通道在多个并行操作中正常工作,并且不会成为瓶颈。直接基于请求启动流程听起来不是个好主意。最好创建一个独立的服务来接管运行脚本的工作,并可选地提供某种类型的结果报告
此服务通常与django/httpd服务器并行启动,但运行完全独立。在django代码中,您需要与该服务通信。有许多不同的方法可以实现这一点:直接通过本地端口、队列、命名管道、DBU等进行通信,或者间接地通过数据库进行通信,例如,服务将轮询数据库以进行更改。只能确保通信通道在多个并行操作中正常工作,并且不会成为瓶颈。这些功能在做什么?它们使用不同的模块