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、线程的更多相关文章

  1. Python 基础之 线程与进程

    Python 基础之 线程与进程 在前面已经接触过了,socket编程的基础知识,也通过socketserver 模块实现了并发,也就是多个客户端可以给服务器端发送消息,那接下来还有个问题,如何用多线 ...

  2. Python进程、线程、协程

    进程和线程的解释 进程(process)和线程(thread)是操作系统的基本概念,计算机的核心是CPU,它承担了所有的计算任务: 单个CPU一次只能运行一个任务,代表单个CPU总是运行一个进程,其他 ...

  3. python进程、线程、协程(转载)

    python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资 ...

  4. Python进程、线程、协程详解

    进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. ...

  5. 理解 Python 中的线程

    原地址:http://blog.jobbole.com/52060/ 本文由 伯乐在线 - acmerfight 翻译自 Akshar Raaj.欢迎加入技术翻译小组.转载请参见文章末尾处的要求. 我 ...

  6. python进阶-------进程线程(二)

    Python中的进程线程(二) 一.python中的"锁" 1.GIL锁(全局解释锁) 含义: Python中的线程是操作系统的原生线程,Python虚拟机使用一个全局解释器锁(G ...

  7. python利用socketserver实现并发套接字功能

    本文实现利用python的socketserver这个强大的模块实现套接字的并发 目录结构如下: 测试文件请放在server_file文件夹里面 server.py #!/usr/bin/env py ...

  8. python中的线程技术

    #!/user/bin/env python # @Time :2018/7/7 11:42 # @Author :PGIDYSQ #@File :DaemonTest.py import threa ...

  9. python之socketserver实现并发

    python之socketserver实现并发 服务端 import socketserver #socketserver模块是用来实现并发 # 我们自己的类里一定要继承socketserver.Ba ...

  10. python并发_线程

    关于进程的复习: # 管道 # 数据的共享 Manager dict list # 进程池 # cpu个数+1 # ret = map(func,iterable) # 异步 自带close和join ...

随机推荐

  1. hihoCoder编程练习赛67

    题目1 : 序列 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个正整数 n, P,求满足以下两个条件的长度为 n 的序列 ai 个数: 1. 1 ≤ ai ≤ ...

  2. ASPxGridView 添加勾选列--全选 和 后端获取勾的行ID

    一.HTML 代码 <table style="width: 100%;"> <tr> <td> <asp:Button ID=" ...

  3. Grunt 入门操作指南

    0.简介 grunt是一个任务自动运行器.简单来讲,用了以后,再也不用每次修改sass后,去生成下css,也再也不用去一遍遍压缩js了 ,也再也不用修改了点点东西就要去刷新页面,也不需要去复杂地建立一 ...

  4. 【资料】Mac OS X 10.9虚拟机镜像及tools

    原文链接 http://bbs.itheima.com/thread-141793-1-1.html 1.首先解压文件,两个同时选中,右键进行解压. 2.打开虚拟机VMware workstation ...

  5. Vue2 几种常见开局方式

    在SF问题中看到了一个关于vue-cli中的template问题,问题是这样的:用vue-cli工具生成的main.js中: import Vue from 'vue' import App from ...

  6. 【代码笔记】Web-JavaScript-JavaScript正则表达式

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  7. 运行 python *.py 文件出错,如:python a.py

    运行 python *.py 文件出错,如:python a.py(下图) 原因:没有安装web.py 解决:下载并安装 网址:http://webpy.org/install#install  (h ...

  8. event.target和event.currentTarget区别

    首先本质区别是: event.target返回触发事件的元素 event.currentTarget返回绑定事件的元素

  9. ORACLE中内部函数SYS_OP_C2C和隐式类型转换

    什么是SYS_OP_C2C呢?官方的介绍如下: SYS_OP_C2C is an internal function which does an implicit conversion of varc ...

  10. sql 语句-初级进阶(一)

    以下所有的sql语句是根据个人资料进行操作,为方便大家操作联系,附上链接:: 链接:https://pan.baidu.com/s/14LmWyhJPQRzpjURQBKM4mA 提取码:wu1q  ...