Python:Day27 socketserver、线程
socketserver模块源码中没找到get_request()的方法,原因????
服务器端--------------------------------------------------
import socketserver class MyServer(socketserver.BaseRequestHandler): # 定义一个类,必须要继承括号中的类
def handle(self): # 这个方法名字只能是这个,因为父类中也有这个方法,此处是重写这个方法的。
# while True: #这个循环不要加,加了之后意外断开会出问题。
conn = self.request
while True:
try:
data = conn.recv(1024)
except Exception:
print("对方意外中断!")
break
if not data:
break
print(str(data, "utf8"))
inp = input(">>>>:")
conn.send(bytes(inp, "utf8"))
conn.close() server1 = socketserver.ThreadingTCPServer(("127.0.0.1", 8000), MyServer) # 此处容易忘记添加上面定义的类
server1.serve_forever() 客户端-------------------------------------------------------------
import socket sk = socket.socket()
ip_port = ("127.0.0.1",8000)
sk.connect(ip_port) while True:
inp = input(">>>>>:")
if inp == "exit":
break
sk.send(bytes(inp, "utf8"))
data = sk.recv(1024)
print(str(data, "utf8"))
sk.close()
线程:
计算密集型任务、I/O密集型的任务
线程的两种创建方法:
(1)实例化Thread类,传入函数:
import threading def foo(num):
print('this is thread %s' % num) t1 = threading.Thread(target=foo(1))
t2 = threading.Thread(target=foo(2))
t1.start() # this is thread 1
t2.start() # this is thread 2
print(t1.getName()) # Thread-1
print(t2.getName()) # Thread-2
(2)从Thread派生一个子类,创建这个子类的实例
import threading class MyThread(threading.Thread):
def __init__(self, num):
threading.Thread.__init__(self)
self.num = num def run(self):
print("this is thread %s" % self.num) t1 = MyThread(1)
t2 = MyThread(2)
t1.start() # this is thread 1
t2.start() # this is thread 2
join():在子线程完成运行之前,这个子线程的父线程将一直被阻塞。
import threading
import time def music(func):
for i in range(2):
print("Begin listening to %s . %s" % (func, time.ctime()))
time.sleep(1)
print("end listening %s" % time.ctime()) def movie(func):
for i in range(2):
print("Begin watching %s . %s" % (func, time.ctime()))
time.sleep(5)
print("end watching %s" % time.ctime()) threads = []
t1 = threading.Thread(target=music, args=("七里香",))
threads.append(t1)
t2 = threading.Thread(target=movie, args=("阿甘正传",))
threads.append(t2) if __name__ == '__main__':
for t in threads:
t.start()
t.join() # t2进程结束后,主线程才继续执行
print("all over ..........%s" % time.ctime())
setDaemon():将线程设置为守护线程,设置为守护线程的线程,它守护着主线程,主进程结束了,它也就结束了。
import threading
import time def music(func):
for i in range(2):
print("Begin listening to %s . %s" % (func, time.ctime()))
time.sleep(1)
print("end listening %s" % time.ctime()) def movie(func):
for i in range(2):
print("Begin watching %s . %s" % (func, time.ctime()))
time.sleep(5)
print("end watching %s" % time.ctime()) threads = []
t1 = threading.Thread(target=music, args=("七里香",))
threads.append(t1)
t2 = threading.Thread(target=movie, args=("阿甘正传",))
threads.append(t2) if __name__ == '__main__':
t2.setDaemon(True) #将t2设置为守护线程,
for t in threads:
t.start()
print("all over ..........%s" % time.ctime())
Threading的其它方法:
# threading.currentThread(): 返回当前的线程变量。
# threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
# threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
# 除了使用方法外,线程模块同样提供了Thread类来处理线程,Thread类提供了以下方法:
# run(): 用以表示线程活动的方法。
# start():启动线程活动。
# join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
# isAlive(): 返回线程是否活动的。
# getName(): 返回线程名。
# setName(): 设置线程名。
Python:Day27 socketserver、线程的更多相关文章
- Python 基础之 线程与进程
Python 基础之 线程与进程 在前面已经接触过了,socket编程的基础知识,也通过socketserver 模块实现了并发,也就是多个客户端可以给服务器端发送消息,那接下来还有个问题,如何用多线 ...
- Python进程、线程、协程
进程和线程的解释 进程(process)和线程(thread)是操作系统的基本概念,计算机的核心是CPU,它承担了所有的计算任务: 单个CPU一次只能运行一个任务,代表单个CPU总是运行一个进程,其他 ...
- python进程、线程、协程(转载)
python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资 ...
- Python进程、线程、协程详解
进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. ...
- 理解 Python 中的线程
原地址:http://blog.jobbole.com/52060/ 本文由 伯乐在线 - acmerfight 翻译自 Akshar Raaj.欢迎加入技术翻译小组.转载请参见文章末尾处的要求. 我 ...
- python进阶-------进程线程(二)
Python中的进程线程(二) 一.python中的"锁" 1.GIL锁(全局解释锁) 含义: Python中的线程是操作系统的原生线程,Python虚拟机使用一个全局解释器锁(G ...
- python利用socketserver实现并发套接字功能
本文实现利用python的socketserver这个强大的模块实现套接字的并发 目录结构如下: 测试文件请放在server_file文件夹里面 server.py #!/usr/bin/env py ...
- python中的线程技术
#!/user/bin/env python # @Time :2018/7/7 11:42 # @Author :PGIDYSQ #@File :DaemonTest.py import threa ...
- python之socketserver实现并发
python之socketserver实现并发 服务端 import socketserver #socketserver模块是用来实现并发 # 我们自己的类里一定要继承socketserver.Ba ...
- python并发_线程
关于进程的复习: # 管道 # 数据的共享 Manager dict list # 进程池 # cpu个数+1 # ret = map(func,iterable) # 异步 自带close和join ...
随机推荐
- 关于Facebook和Google+授权登录
实际中遇到需要Facebook和Google+等第三方授权登录自己的Web应用(可能还有Android和IOS的手机应用),本质上都是JS SDK的官方应用.这时候不得不去他们官方查看文档. 注:一下 ...
- (一):C++分布式实时应用框架----整体介绍
C++分布式实时应用框架 (Cpp Distributed Real-time Application Framework) 版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经 ...
- angular 过滤器(日期转换,时间转换,数据转换等)
(function() { 'use strict'; /** * myApp Module * * Description */ angular.module('myApp') .filter('i ...
- select&epoll
内核空间和用户空间 现在操作系统都是采用虚拟存储器,那么对 32 位操作系统而言,它的寻址空间(虚拟地址空间,或叫线性地址空间)为 4G(2的32次方).也就是说一个进程的最大地址空间为 4G.操作系 ...
- Javascript 对象 - 数学对象
数学对象 JavaScript中提供了math对象,math对象包含一些常用的属相和方法.Math对象与Array对象.String对象.Data对象不同,没有构造函数,因此不能创建Math对象.可直 ...
- ArrayMap 和HashMap的区别
在以往android开发中,我们常常用key-value存储数据时,随手就会打出HashMap的代码,当数据量较小时,这种方法还不错还可以,当数据量比较多的时候,如果是PC机上,也还阔以.但是如果使用 ...
- ajax post 提交数据和文件
方式一:常用的方式是通过form.serialize()获取表单数据,但是,这样有个弊端,文件不能上传 $.ajax({ url:'/communication/u/', type:'POST', d ...
- OkHttpHelper使用
源码:https://gitee.com/xcode_xiao/OkHttpHelper 网络请求缓存的支持,OKHttp Retrofit (get,post,一切,文字,图片,语音,文件,自定义缓 ...
- leetcode-67.二进制求和
leetcode-67.二进制求和 Points 数组 数学 题意 给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = &qu ...
- DOM对象和window对象
本文内容: DOM对象 Window 对象 首发日期:2018-05-11 DOM对象: DOM对象主要指代网页内的标签[包括整个网页] 比如:document代表整个 HTML 文档,用来访问页面中 ...