Spawning是一个支持多进程、多线程、绿色线程、非阻塞HTTP io以及代码自动平滑升级的WSGI服务器。
项目描述
Spawning是一个快速、易于使用且灵活的HTTP服务器,用于托管符合WSGI接口的Python Web应用程序。
Spawning使用eventlet进行非阻塞I/O处理http请求和响应。这意味着服务器可以轻松扩展到大量的空闲长连接。Spawning可以配置为使用多个操作系统进程以及POSIX线程或eventlet的绿色线程(使用greenlet实现)。
Spawning是开源软件,使用MIT许可证。如果您想为开发做出贡献,请从http://github.com/rtyler/Spawning/检出源代码,并提交补丁或Fork spawning提交一个pull请求。
单进程或多进程
如果您的wsgi应用程序在内存中存储状态,Spawning可以配置为只运行一个Python进程。在这种配置下,您的应用程序状态将对所有请求可用,但您的应用程序无法充分利用多处理器。使用多个进程可以利用所有处理器,因此应该用于不共享状态的应用程序。
单个或多个工作线程
如果您的wsgi应用程序执行了被eventlet monkeypatched以进行协作的某些阻塞调用子集(例如socket模块中的操作),您可以将每个进程配置为只运行一个主线程,并使用eventlet的green threads进行协作。如果您的应用程序需要扩展到大量同时打开的连接,例如COMET服务器或使用AJAX轮询的应用程序,这可能很有用。然而,大多数现有的wsgi应用程序可能都会执行阻塞操作(例如,调用执行阻塞套接字操作的数据库适配器库)。因此,对于大多数wsgi应用程序,多个进程和多个线程的组合将是理想的。
优雅的代码重新加载
Spawning可以监视所有导入到sys.modules中的Python文件的变化,并在变化时执行优雅的重新加载。要启用此行为,请在命令行上指定–reload=dev。旧的进程被通知停止接受请求并完成它们正在服务的任何未完成的请求,然后关闭。同时,新的进程启动并开始接受请求并使用新代码提供服务。在重新加载过程中,您的网站的访问者不会看到“连接拒绝”错误,因为服务器在重新加载期间始终在监听。
运行Spawning
Spawning可以使用“spawn”脚本或使用Python Paste从命令行启动wsgi应用程序。要使用paste,请在paste的ini文件的[server:main]部分指定use = egg:Spawning。
Spawning还可以通过使用–factory=spawning.django_factory.config_factory来运行Django应用程序。
运行Spawning的示例
在my_wsgi_module.py文件中运行名为“my_wsgi_application”的wsgi应用程序调用
% spawning my_wsgi_module.my_wsgi_application
运行开发.ini配置文件中配置的内容。相当于使用paster serve和一个配置为使用Spawning作为服务器的ini文件
% spawning --factory=spawning.paste_factory.config_factory development.ini
运行Django应用mysite
% spawning --factory=spawning.django_factory.config_factory mysite.settings
运行带有某些中间件的wsgi应用程序。在wsgi应用程序名称后传递尽可能多的中间件字符串
% spawning my_wsgi_module.my_wsgi_application other_wsgi_module.some_wsgi_middleware
在端口80上运行wsgi应用程序,每个进程使用大小为8的线程池
% sudo spawning --port=80 --processes=4 --threads=8 my_wsgi_module.my_wsgi_application
使用大小为0的线程池,这表示应该执行eventlet monkeypatching,并且所有wsgi应用程序都应该在同一个线程中被调用。这对于编写大量请求仅等待服务器端事件或内部网络io完成的应用程序(如comet-style应用)很有用
% spawning --processes=4 --threads=0 my_wsgi_module.my_comet_application
其他有用的参数
-l ACCESS_LOG_FILE, –access-log-file=ACCESS_LOG_FILE
记录访问日志行的文件。如果没有提供,则记录到stdout。传递/dev/null以丢弃日志。
-c, –coverage
如果提供,则从运行程序收集覆盖率数据,并通过/_coverage url提供覆盖率报告。有关更多信息,请参阅figleaf文档:http://darcs.idyll.org/~t/projects/figleaf/doc/
-m MAX_MEMORY, –max-memory=MAX_MEMORY
如果提供,则Spawning实例允许使用的最大内存量。如果此Spawning控制器启动的所有进程使用的内存量超过此量,则向控制器发送SIGHUP以重新启动子进程。
-a MAX_AGE, –max-age=MAX_AGE
如果提供,则spawning_child实例允许运行的最大时间(以秒为单位)。一旦时间限制到期,将向spawning_controller发送SIGHUP,导致它重新启动所有子进程。
–status-port=PORT, –status-host=HOST
如果提供,则启动一个小型Web服务,以提供Spawning服务器的健康状态报告。该服务监听以下两个url:
第一项是一个以人性化的方式显示服务器状态的HTML页面。.json URL是对相同数据的JSON格式化。
只有在提供并指定与服务端口不同的–status-port选项时,才会启动状态Web服务。如果监控发生在与Web应用请求不同的IP地址上,则–status-host非常有用。
项目详情
Spawning-0.9.7.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 545e636350aee40d1df9d9aee7423d98f05ee32530f11cb832cf8ee49f6dee44 |
|
MD5 | d9e517ab33bba1961a4733aec8e1c92e |
|
BLAKE2b-256 | b68b9110d75bfdafc4a7c27cd38752773d854222f43b3b8192aec7151f0f3cac |