PYTHON多进程并发WEB服务器(利用LINUX的FORK)

这个又牛X 一点点。。

这还不涉及IO,如果调用GEVENT之类作异步IO或非阻塞IO,那就大框架都有啦。。

#####################################################################
# Iterative server - webserver3a.py                                 #
#                                                                   #
# Tested with Python 2.7.9 & Python 3.4 on Ubuntu 14.04 & Mac OS X  #
#####################################################################
import socket
import time
import os
import signal
import errno

SERVER_ADDRESS = (HOST, PORT) = '', 8888
REQUEST_QUEUE_SIZE = 5

def grim_reaper(signum, frame):
    while True:
    try:
        pid, status = os.waitpid(-1, os.WNOHANG)
    except OSError:
        return
    if pid == 0:
        return
    print ('Child {pid} terminated with status {status}'
    .format(pid=pid, status=status))

def handle_request(client_connection):
    request = client_connection.recv(1024)
    print('Child PID: {pid}. Parent PID {ppid}'.format(
        pid=os.getpid(),
        ppid=os.getppid(),
        )
          )
    print(request.decode())
    http_response = b"""
        HTTP/1.1 200 OK

        Hello, Python WSGI!
        """
    client_connection.sendall(http_response)
    time.sleep(6)

def serve_forever():
    listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    listen_socket.bind(SERVER_ADDRESS)
    listen_socket.listen(REQUEST_QUEUE_SIZE)
    print('Serving HTTP on port {port} ...'.format(port=PORT))
    print('Parent PID (PPID): {pid}'.format(pid=os.getpid()))

    signal.signal(signal.SIGCHLD, grim_reaper)
    while True:
    try:
        client_connection, client_address = listen_socket.accept()
    except IOError as e:
        code, msg = e.args
        if code == errno.EINTR:
        continue
        else:
        raise
        pid = os.fork()
        if pid == 0:
            listen_socket.close()
            handle_request(client_connection)
            client_connection.close()
            os._exit(0)
        else:
            client_connection.close()

if __name__ == '__main__':
    serve_forever()

时间: 2024-08-09 05:11:28

PYTHON多进程并发WEB服务器(利用LINUX的FORK)的相关文章

Python网络框架——Web服务器

引言:Web服务器是连接用户浏览器与Python服务器端程序的中间节点,在网站建立的过程中起着重要的作用.目前最主流的Web服务器包括Nginx.Apache.lighthttpd.IIS等.Python服务器端程序在Linux平台下使用最广泛的是Nginx. 本文将带您学习Python程序与Web服务器连接的WSGI接口.Nginx的安装和配置方法,以及搭建SSL网站的技术.本文选自<Python高效开发实战--Django.Tornado.Flask.Twisted>一书. 实战演练1:W

Python多进程并发(multiprocessing)用法实例详解

  本文实例讲述了Python多进程并发(multiprocessing)用法.分享给大家供大家参考.具体分析如下: 由于Python设计的限制(我说的是咱们常用的CPython).最多只能用满1个CPU核心. Python提供了非常好用的多进程包multiprocessing,你只需要定义一个函数,Python会替你完成其他所有事情.借助这个包,可以轻松完成从单进程到并发执行的转换. 1.新建单一进程 如果我们新建少量进程,可以如下: ? 1 2 3 4 5 6 7 8 9 10 11 imp

ftp上传下载,ftp服务器在windows系统下,web服务器在linux系统下

问题描述 ftp上传下载,ftp服务器在windows系统下,web服务器在linux系统下 哪位大神知道: ftp服务器在搭建windows系统下,web服务器在部署linux系统下,现java中使用ftpclient实现上传下载时,下载的文件内容是乱码: 之前web服务器也部署在windows系统下正常的,后来迁移到linux系统下出现乱码了啊,中文文件名编码正常. 查ftpclient的源码发现读取ftp服务器上文件的编码格式固定了,无法在外部修改,有试着将读取出来的文件转码各种编码方式,

python批量同步web服务器代码核心程序_python

#!/usr/bin/env python #coding:utf8 import os,sys import md5,tab from mysql_co.my_db import set_mysql from ssh_co.ssh_connect import sshd from ssh_co.cfg.config import ssh_message,item_path from file import findfile def my_mysql(): db_file={} my_conne

python下的web服务器模块

python下的web服务模块有三种: BaseHTTPServer: 提供基本的Web服务和处理器类,分别是HTTPServer和BaseHTTPRequestHandler SimpleHTTPServer: 包含执行GET和HEAD请求的SimpleHTTPRequestHandler类 CGIHTTPServer: 包含处理POST请求和执行CGIHTTPRequestHandler类. 下面是CGIHTTPServer类示例: 1 root@u254:~/cp# tree 2 . 3

Nginx+PHP(FastCGI)搭建高并发WEB服务器(自动安装脚本)第二版_nginx

本文是依照张宴的 Nginx 0.7.x + PHP 5.2.10(FastCGI)搭建胜过Apache十倍的Web服务器(第5版) 编写 原文地址 http://blog.s135.com/nginx_php_v5/ 因为编译过程和等待时间繁琐,于是就自己写了个全自动安装的shell脚本,此脚本可以随意修改,转载请注明出处. 这篇文章为这个系列的第二版,在第一版的基础上加入 1.日志切割 2.智能选择yum或者rpm安装 下载地址 注意:如果不能使用yum源,请放入系统光盘,单张dvd的,如果

python高并发异步服务器核心库forkcore使用方法_python

1 拷贝下面的代码到一个文件,并命名为forkcore.py 复制代码 代码如下: import osimport threadingimport selectimport socket class ds_forkcore(object):     #async IO(epoll)    def ds_epoll(self):        epoll=select.epoll()        epoll.register(self.s.fileno(),select.EPOLLIN|sele

linux轻量级 Web 服务器第1/2页_Linux

作为 Apache 和其他市场领头产品的补充的专用 HTTP 应用程序      级别: 中级Cameron Laird (claird@phaseit.net), 副总裁, Phaseit, Inc.2007 年 7 月 23 日 最 近几年,市场上出现了很多有趣的 Web 服务器实现,包括 lighthttpd.litespeed 和 mongrel 等.这些 Web 服务器都宣称结合了性能.易管理性.可移植性.安全性和其他相关价值.下面的工程研究将调查轻量级 Web 服务器,以帮助您选择最

Python实现的检测web服务器健康状况的小程序_python

对web服务器做健康检查,一般我们都是用curl库(不管是php,perl的还是shell的),大致的方法一致: 复制代码 代码如下: curl -I -s www.qq.com  |head -1|awk '{ health = $2=="200"?"server is ok":"server is bad"}END{print health}' server is ok 说白了这些方式都是封装了curl库的,另外还有一些关于http的模块,例