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-10-22 16:11:57

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

1支持高并发web服务器搭建

支持高并发web服务器搭建 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] CTCDN系统优化参数 关闭ipv6 避免放大攻击 开启恶意icmp错误消息保护 关闭路由转发 开启反向路径过滤 处理无源路由的包 关闭sysrq功能 core文件名中添加pid作为扩展名 开启SYN洪水攻击保护 修改消息队列长度 设置最大内存共享段大小bytes timewait的数量默认180000 系统同时保持TIME_WAIT的最大数量如果超过这个数字TIME_WAIT将立刻被清除并打印警

python 启动简单web服务器

有时我们在开发web静态页面时,需要一个web服务器来测试. 这时可以利用python提供的web服务器来实现. 1.在命令行下进入某个目录 2.在该目录下运行命令: python -m SimpleHTTPServer 3.在浏览器打开 http://localhost:8000/路径 这里的路径是相对上面当前目录下的路径.

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

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

基于tomcat响应处理模型实现的高并发web服务器

在上一篇博客中,一个简单的AIOweb处理例子,可以看到AIO异步处理,依赖操作系统完成IO操作的Proactor处理模型确实很强大,可以是实现高并发,高响应服务器的不错选择,但是在tomcat中的connector的处理模型还依旧是基于NIO的处理,当然,我认为这可能会在以后的版本进行改进,但另一方面,我更认为AIO的负载控制方面的处理可能是比较难的,因为AIO api并没有提供我们对分配线程组的处理,而只是提供一个线程组,交给操作系统去解决io处理上的问题,所以,这可能会给需要复杂处理的负载

Python 实现简单 Web 服务器

Python 实现简单 Web 服务器 最近有个需求,就是要创建一个简到要多简单就有多简单的web服务器,目的就是需要一个后台进程用来接收请求然后处理并返回结果,因此就想到了使用python来实现. 首先创建一个myapp.py文件,其中定义了一个方法,所有的请求都会经过此方法,可以在此方法里处理传递的url和参数,并返回结果. def myapp(environ, start_response): status = '200 OK' headers = [('Content-type', 't

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

#!/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 [email protected]:~/cp# tre

python多进程并发编程

Python提供了非常好用的多进程包multiprocessing,你只需要定义一个函数,Python会替你完成其他所有事情. 借助这个包,可以轻松完成从单进程到并发执行的转换. 一.单进程编程 如果我们新建少量进程,可以如下: import multiprocessing import time def func(msg): for i in xrange(3): print msg time.sleep(1) if __name__ == "__main__": p = multi

web服务器管理Linux必备的命令

1.站点根目录下查找是否被放置webshell木马根据语句判断是不是PHP木马脚本 # find /storage/www/ -name "*.php" | xargs grep-in --color "eval("# grep -i --include='*.php' -r system\s*\( /storage/www/2.统计访问日志中来自同ip出现的次数分析盗链.攻击.机器人# cat access.log |awk '{print $1}'| sort