我需要在收到POST请求时执行一些缓慢的任务。我的服务器在UWSGI下运行,UWSGI以一种奇怪的方式运行
本地主机(pythonmanage.pyrunserver
):
p=Process(target=workload);p、 start();返回重定向(…)
。浏览器立即跟随重定向,工作过程在后台开始UWSGI(2名工人):
注意,我在uwsgi配置中添加了close-on-exec=true
(如文档和在uwsgi应用程序中运行子进程时所建议的)参数,但没有明显的效果,应用程序等待子进程退出
我猜想Python会感到困惑,因为解释器multiprocessing.Process()
默认为uwsgi
二进制,而不是常规的Python解释器。
此外,您可能正在使用fork
spawn方法(取决于操作系统),而将uWSGI工作线程分叉并不是一个好主意。
当您在uWSGI下运行时,可能需要调用多处理.set_executable()
和多处理.set_spawn_method()
,例如,在Django settings.py中使用类似的内容:
import multiprocessing
import sys
try:
import uwsgi # magic module only available when under uwsgi
except ImportError:
uwsgi = None
if uwsgi:
multiprocessing.set_spawn_method('spawn')
multiprocessing.set_executable(os.path.join(sys.exec_prefix, 'python'))
但是,您可能需要研究使用uWSGI的后台处理系统或其他工作队列/后台任务系统,如Huey、rq、Minique、芹菜等。
从父进程派生出子进程,子进程完全拷贝父进程的stack,data,heap segment。 两者并不共享地址空间,所以的变量是独立的,一方修改,另一方不会变化。 函数原型 #include <unistd.h> pid_t fork(void); 特点 一次调用,两次返回
我用uWSGI运行一个烧瓶服务器。进程由System d启动。 现在我需要一些以“while(True)”运行的子流程,它们必须始终收集一些信息。 我现在开始一个具有多重处理的子过程。 下面是我的一些代码: 然后我用systemd重新启动/停止uWSGI,进程阻塞,当然它不受SIG影响。 我的第一个想法是实现一个单音句柄: 但不幸的是,他们没有点火。。。 如果服务器即将关闭,是否会触发事件,或者我
uWSGI 是在像 nginx 、 lighttpd 以及 cherokee 服务器上的一个部署的选 择。更多选择见 FastCGI 和 独立 WSGI 容器 。 你会首先需要一个 uWSGI 服务器来用 uWSGI 协议来使用你的 WSGI 应用。 uWSGI 是 一个协议,同样也是一个应用服务器,可以提供 uWSGI 、FastCGI 和 HTTP 协议。 最流行的 uWSGI 服务器是 uw
uWSGI 是一个快速的、纯C语言开发的、自维护的、对开发者友好的 WSGI 服务器,旨在提供专业的 Python web应用发布和开发。可使用 C/C++/Objective-C 来为 uWSGI 编写插件。 架构图: 与 Gunicorn 的性能比较: 配置方法: LoadModule uwsgi_module libexec/apache2/mod_uwsgi.so<Location
描述 (Description) 此函数使用fork()系统调用强制执行新进程。 任何共享套接字或文件句柄都跨进程重复。 你必须确保等待你的孩子,以防止形成“僵尸”过程。 语法 (Syntax) 以下是此函数的简单语法 - fork 返回值 (Return Value) 此函数在成功时将fork和子进程ID返回到父成功0到子进程时返回undef。 例子 (Example) 以下是显示其基本用法的
此函数用于在系统上生成新的子进程。 语法 (Syntax) fork() 参数 (Parameters) 没有 返回值 (Return Value) 此函数返回新进程的进程ID。 例子 (Example) /* Main program */ options arexx_bifs say fork() 当我们运行上述程序时,我们将得到以下结果。 返回的进程号因系统而异。 结果的一个例子如