day8 socket socketserver 异常 断言

http://www.cnblogs.com/wupeiqi/articles/5040823.htmlsend

http://www.cnblogs.com/alex3714/articles/5227251.html

sendall不断调用send ,一次性发送过去,传大文件不合适

SocketServer  通过多线程的方式处理

部分代码

# _*_ coding:utf8 _*_

import socketserver

class MyTCPHandler(socketserver.BaseRequestHandler):   #为什么是BaseRequestHandler,见alex博客,它下又分其他的东西
    #必须有handle方法
    def handle(self):
        #所有跟客户端的交互都是在这里的
        #pass
        print("New Conn:", self.client_address)  #打印客户端的地址
        data = self.request.recv(1024)
        print("Client Says:",data.decode())
        self.request.send(data)

if __name__ == "__main__":
    HOST, PORT = "localhost", 50007
    #把刚才写的类当作一个参数传发给ThreadingTCPServer这个类,下面的代码就创建了一个事例
    server = socketserver.ThreadingTCPServer((HOST, PORT),MyTCPHandler)
    #启动这个server,这个server会一直运行,除非ctrl+c停止
    server.serve_forever()

加上while True可实现的效果多个客户端可以连接,多并发的。客户端还是之前的那段代码几乎不变

 

异常处理
try:
    pass  
except

finally
无论是否出错都执行
else
没有出一场就执行
自己出发异常 raise

Exception 万能异常

自定义异常

一些业务逻辑无法满足需自己定义异常

http://www.cnblogs.com/wupeiqi/articles/5017742.html

class WupeiqiException(Exception):
 
    def __init__(self, msg):
        self.message = msg
 
    def __str__(self):
        return self.message
 
try:
    raise WupeiqiException(‘我的异常‘)
except WupeiqiException,e:
    print e

断言

assert 判断这个条件不成立就报错

作用 显示明确判断这个条件必须符合

join等待线程执行完毕

线程和进程的区别
GIL 全局解释器锁
防止原生线程同时修改一份数据,是非线程安全的(不能保证数据一致),需加锁
py调用C的原生线程,无法控制C的原声线程,启动10个原生线程,可能把数据该乱,py无法控制 那就只让一个时间一个线程修改

这个数据,真正运行的只有一个原生线程

线程可以共享数据,进程默认不能,需通过第三方管道或者队列(q)、Pipe

线程锁和GIL没有任何关系,区别:
GIL限制只有一个线程运行,解释器来回切换线程使得每个线程得到运行,
当第一个线程运行完得到结果,还没赋值给全局变量时第二个又运行了,第二个运行完把结果赋值给全局变量时
解释器又切换到了第一个线程,这时第一个线程会把为赋值的结果付回去,会冲掉第二个线程的值
GIL控制的是解释器的这块,防止解释器下面这一层的数据被改掉。线程锁是防止解释器上面的数据胡乱修改

进城之间无法通信
进程多了机器就挂,所以需要设置进程池(Pool)
callback 回调 可以把子进程的结果传给父进程

时间: 2024-08-29 18:44:15

day8 socket socketserver 异常 断言的相关文章

socket socketserver

1.socket  模块 流程图 单线程,过程类似打电话 server端 #server端 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Alex Lire import socket import subprocess #导入执行命令模块 ip_port=('127.0.0.1',9999) #定义元祖 #买手机 s=socket.socket() #绑定协议,生成套接字 s.bind(ip_port) #绑定ip+协议+端口:用来

Java基础语法<十一> 异常 断言 日志 调试

1 处理错误 1.1 异常分类 Error类层次描述了Java运行时系统的内部错误和资源耗尽错误. 设计Java程序时,主要关注Exception层次结构. 由程序错误导致的异常属于RuntimeException ,而程序本身没有问题,但由于像I/O错误这类问题导致的异常属于其他异常. RuntimeException包含下面几种情况: 错误的类型转换 ClassCastException 数组访问越界 ArrayIndexOutOfBoundsException 访问空指针 NullPoin

[core java学习笔记][第十一章异常断言日志调试]

第11章 异常,断言,日志,调试 处理错误 捕获异常 使用异常机制的技巧 使用断言 日志 測试技巧 GUI程序排错技巧 使用调试器 11.1 处理错误 11.1.1异常分类 都继承自Throwable类 分成Error和Exception Error类 描写叙述了Java运行时系统的内部错误和资源耗尽错误. 应用程序不应该抛出此种类型的错误.假设出现了这样的内部错误.除了通告给用户,并尽力使程序安全地终止外,再也无能为力 Exception层次结构:最需关注的 RuntimeException

python 异常断言

在实际的脚本开发中,我们需要用到python 的异常处理来捕捉异常和抛异常,所以我们有需要学习和使用python 的异常处理. 代码示例: >>> open('abc.txt','r')Traceback (most recent call last):File "<stdin>", line 1, in <module>IOError: [Errno 2] No such file or directory: 'abc.txt' 打开一个不存

python socket和socketserver

Python提供了两个基本的socket模块.一个是socket,它提供了标准的BSD Socket API:另一个是socketServer,它提供了服务器中心类,可以简化网络服务器的开发. 下面先简要介绍socket模块包含的类及其使用. 1.开始了解socket模块前,先熟悉下Python的网络编程模块主要支持的两种Intent协议:TCP和UDP.TCP协议是一种面向连接的可靠协议,用于建立机器之间的双向通信流.UDP协议是一种较低级别的.以数据包为基础的协议(无连接传输模式).与TCP

python基础之socket与socketserver

---引入 Socket的英文原义是"孔"或"插座",在Unix的进程通信机制中又称为'套接字'.套接字实际上并不复杂,它是由一个ip地址以及一个端口号组成.Socket正如其英文原意那样,像一个多孔插座.一台主机犹如布满各种插座(ip地址)的房间,每个插座有很多插口(端口),通过这些插口接入电线(进程)我们可以烧水,看电视,玩电脑-- 应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 套接字的作用之一就是用来区分不同应用进程,当某个进

Python开发Day8(socket练习)

客户端代码: #!/usr/bin/python3.5 __auth__ = 'WuYongQi' import socket,pickle,os,sys def up_duandian(obj,filename): duandian = str(obj.recv(1024),encoding='utf-8') if duandian == 'No': print('文件不存在!') else: duandian = int(duandian) print(duandian) obj.senda

Socket .net MVC 的配置 包括异常断开

解决问题: 1. Socket 的异常断开 2. 部署在IIS程序池上的程序回收导致 端口占用,对象资源却已经释放的BUG SocketHelper 类   inOptionValues .net框架中用于检测连接的客户端 检测时间(默认2小时)   或者自己写个心跳包(客户端和服务端用规定协议) 1 #region 变量 2 3 //服务器监听socket 4 public static Socket listener = null; 5 6 /// <summary> 7 /// 连接列表

winform学习日志(二十三)---------------socket(TCP)发送文件

一:由于在上一个随笔的基础之上拓展的所以直接上代码,客户端: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using Sys