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 ...
随机推荐
- Android LiveData使用
LiveData是一个可观察的数据持有者类. 与常规observable不同,LiveData是生命周期感知的,当生命周期处于STARTED或RESUMED状态,则LiveData会将其视为活动状态, ...
- TCP连接与释放
TCP连接的建立 三次握手 TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态. TCP客户进程也是先创建传输控制块TCB,然后向服务器 ...
- 详解margin: auto
auto是margin的可选值之一.相信大家平时使用auto值时,最多的用法大概是 margin: 0 auto; 和 margin: auto; 不过你可能也发现了不论是 margin: auto; ...
- es6 语法 (解构赋值)
1.结构赋值 { let a,b,c; [a,b] = [1,2]; console.log(a,b); //1,2} { let a,b,rest; [a,b,...rest] = [1,2,3,4 ...
- webstorm编辑器相关
1.怎么去掉webstorm中间那条线? 如图: 2.webstorm 常见快捷键 1.代码导航和用法查询:只需要按着Ctrl键点击函数或者变量等,就能直接跳转到定义:可以全项目查找函数或者变量,还可 ...
- 关于处理注册表权限无法修改的问题(无法打开主键或注册表项unknown)
CMD下(管理员) secedit /configure /cfg %windir%\inf\defltbase.inf /db defltbase.sdb /verbose 此命令可以生成报告, 任 ...
- Android为TV端助力 转载:内存泄露与内存溢出的区别
内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出. ...
- Android-TextView 控件常用属性以及基本用法
github地址:https://github.com/1165863642/TextViewDemo 前言 这是我第一次写博客,第一次的笔记,不足之处多谅解.开门见山,这一篇博客主要讲一下在Andr ...
- Kotlin入门(21)活动页面的跳转处理
Activity的活动页面跳转是App最常用的功能之一,在前几章的demo源码中便多次见到了,常常是点击界面上的某个按钮,然后跳转到与之对应的下一个页面.对于App开发者来说,该功能的实现非常普通,使 ...
- 学习用Node.js和Elasticsearch构建搜索引擎(5):mac本机部署canal
1.背景介绍 最近做的一个项目需要快速检索数据,经过商讨后采用了ElasticSearch作为快速检索数据引擎,但是数据如何同步到ES中是个问题,我们最开始计划了定时任务.mysql trigger等 ...