37,720
社区成员
发帖
与我相关
我的任务
分享
import os, socket, sys
from worker import Worker
print os.getpid(), 'process start'
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setblocking(0)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(("127.0.0.1", 5000))
sock.listen(10)
for i in range(3):
w = Worker(i, os.getpid(), sock)
pid = os.fork()
if pid != 0:
continue
try:
w.run()
except SystemExit:
raise
except:
sys.exit(-1)
import time
time.sleep(20)
print 'end!'
import errno
import os
import select
import socket
class Worker(object):
def __init__(self, workerid, ppid, socket):
self.id = workerid
self.ppid = ppid
self.socket = socket
self.socket.setblocking(0)
self.address = self.socket.getsockname()
self.timeout = 10
self.alive = True
def run(self):
while self.alive:
nr = 0
while self.alive:
try:
client, addr = self.socket.accept()
msg = client.recv(1024)
print msg.decode(), os.getpid()
print '--------------'
nr += 1
except socket.error, e:
if e[0] in (errno.EAGAIN, errno.ECONNABORTED):
print 'socket.error', os.getpid()
break # Uh oh!
raise
if nr == 0: break
while self.alive:
try:
ret = select.select([self.socket], [], [],
self.timeout)
if ret[0]:
break
except select.error, e:
if e[0] == errno.EINTR:
print 'select error', os.getpid()
break
raise