Multithreading 应用程序内线程与服务器进程

Multithreading 应用程序内线程与服务器进程,multithreading,fork,wsgi,Multithreading,Fork,Wsgi,我有一个网站,有时需要特别长的时间来处理一个请求(这不是一个缺陷)。99%的时间它非常快,因为它几乎不做任何处理 我想在站点处理请求需要很长时间时显示一条消息,上面写着“正在加载”。我的站点使用mod_wsgi和Apache。在我看来,我会在完成处理之前回答说“加载”,并在完成处理之前做两件事中的一件: -生成一个(守护进程)线程来负责处理 -通过套接字与其他进程通信,并告诉它处理(最有可能发送请求到) 一种方法与另一种方法的优缺点是什么?过程路线需要相当多的系统处理。创建一个单独的流程相对来说

我有一个网站,有时需要特别长的时间来处理一个请求(这不是一个缺陷)。99%的时间它非常快,因为它几乎不做任何处理

我想在站点处理请求需要很长时间时显示一条消息,上面写着“正在加载”。我的站点使用mod_wsgi和Apache。在我看来,我会在完成处理之前回答说“加载”,并在完成处理之前做两件事中的一件:

-生成一个(守护进程)线程来负责处理

-通过套接字与其他进程通信,并告诉它处理(最有可能发送请求到)


一种方法与另一种方法的优缺点是什么?

过程路线需要相当多的系统处理。创建一个单独的流程相对来说是昂贵和缓慢的。但是,如果您的流程崩溃,它不会影响您的主要管理流程(您将收到退出状态代码,并有机会重新启动新的工作流程)。您还需要某种进程间通信层(可以是套接字、管道、共享内存等),这会增加项目的复杂性


线既轻又便宜。您所需要做的就是管理对共享资源的并发访问。因此,这实际上取决于你心中的任务。线程可能更适合于实现任务

使用单独的过程更好。正如另一个答案所建议的那样,这一点也不难,因为你可以使用现有的系统来做这件事,比如芹菜(http://celeryproject.org/). 依赖进程内线程并不一定是个好主意,除非您打算实现自己的内部作业排队系统,以防止线程数量激增。此外,在多进程服务器配置中,不能保证请求返回到同一进程,因此不容易获取运行操作的状态。最后,web服务器进程可能被终止,因此您的后台任务也可能在完成之前终止。你们需要有一个机制来保持状态,如果这很重要的话,它可以在这样的事件中幸存下来。像芹菜这样的东西使用起来容易多了。

“你不能保证请求会回到同一个过程。”这对我来说不是什么问题。