Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行python函数的最佳方法,该函数在父级死亡时保持活动状态_Python_Django_Django Views_Multiprocessing - Fatal编程技术网

运行python函数的最佳方法,该函数在父级死亡时保持活动状态

运行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

我有一组python脚本,在发布时从Django视图启动,需要在后台运行,而Django服务器显示下一页

我目前正在尝试使用
多处理.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等进行通信,或者间接地通过数据库进行通信,例如,服务将轮询数据库以进行更改。只能确保通信通道在多个并行操作中正常工作,并且不会成为瓶颈。

这些功能在做什么?它们使用不同的模块