day19总结-多线程

网络编程

1.socket

socket又叫套接字,指的是网络通信的两端,分别是服务器和客户端

socket编程指的就是通过代码实现客户端和服务器之间的通信

2.服务器的实现

2.1创建套接字对象

server = socket.socket()

参数说明:

family:ip类型,AF_INET -> IPv4,AF_INET6 -> IPv6

type:传输协议类型,SOCK_STREAM ->TCP,SOCK_DGRAM ->UDP

2.2绑定IP地址和端口

bind((ip地址,端口号))

ip用来区分互联网上设备

端口是用来区分一台计算机上的不同服务(应用),端口范围是0-65535,其中0-1024是著名端口,选择端口时用其他端口

server.bind(('10.7.190.164',8080))

2.3启动服务器(监听请求)

listen(数量) --数量指的是一次性能够处理的最大请求数

server.listen(255)

2.4让服务器一直处于运行状态

while True:
    print('开始监听...')
    connect,addr = server.accept()       #等待客户端的请求,程序运行到这里会停下(类似input),等到有客户端来连接服务器,才会接着往后执行
    print(connect,addr)
    #send(数据)   --发送数据,数据是二进制数据
    message = input('>>>')
    connect.send(message.encode(encoding='utf-8'))
    #recv(字节数)  --接收数据,并且指定一次性接收的数据的大小的最大值;返回接收到的二进制数据,程序运行到这里也会停下,直到客户端给服务器发送消息后才会接着往后执行。
    data = connect.recv(1024)
    print('<<<')
    print(data.decode(encoding='utf-8'))
    connect.close()

3.客户端的实现

3.1创建套接字对象

client = socket.socket()

3.2连接服务器

connect((ip地址,端口))

client.connect(('10.7.190.164',8080)) #要连接的服务器ip和端口,客户端发送消息端口是随机的,但可以指定。

3.3接收消息

data = client.recv(1024)

print('<<<<')

print(data.decode(encoding='utf-8'))

3.4发送消息

message = input('>>>')

client.send(message.encode(encoding='utf-8'))

client.close()

4.网络请求

根据网络接口请求数据:通过第三方库requests提供的方法

import requests

response = requests.get('网络地址')

response.text #获取字符串形式的数据结果

response.content #获取二进制数据

response.json() #函数,获取json数据并转换为对应的python数据类型


多线程

1.什么是进程

一个正在运行的应用程序就是一个进程,系统会给每个进程分配一个独立的内存区域,用来保存程序运行过程中产生的数据,当进程结束的时候,这个内存区域会自动销毁。

2.什么是线程

进程想要执行任务就必须要有线程。每个进程都默认有一个线程,这个线程叫主线程,其他的线程叫子线程。程序任务都是默认在主线程中执行的。

一个线程中执行多个任务,任务是串行执行的(一个一个按顺序执行)

一个进程中如果有多个线程,多线程执行不同任务的时候是并行(同时执行,实质是假象,是cpu在不同线程间来回调度)

3.python中怎么使用多线程

python通过内置的threading模块来提供多线程相关技术;

其中有一个Thread类,这个类的对象就是线程对象。

def download(film):

    print('开始下载: %s  time: %s' % (film, str(datetime.now())))

    sleep(15)
    print('%s下载完成  time:%s' % (film, str(datetime.now())))
    print(threading.current_thread())

# 在主线程中下载两个电影: 一个一个的下载,一个下载完才下载另一个,总耗时两个电影耗时之和
# download('恋恋笔记本')
# download('摔跤吧爸爸')

# 1.直接创建线程类的对象
"""
a.语法:
线程对象 = Thread(target=函数, args=参数)   -  创建一个线程对象,并且返回。

b.说明
函数 - function类型的变量; 这个函数的函数体就会在子线程中执行
参数 - 元祖; 参数会传给target对应的函数

"""
t1 = threading.Thread(target=download, args=('大国崛起',))
t2 = threading.Thread(target=download, args=('霸王别姬',))

# 2.让线程开始执行任务
"""
线程对象.start()   -   开始执行子线程中的任务
"""
t1.start()
t2.start()
download('变形金刚')
print('=======')
# 某个线程出现异常,是线程直接结束;进程不一定结束,所有的线程都结束,进程才会结束
print([1, 2][10])
print('+++++++++++')

3.1直接创建线程类对象

语法:

import threading

线程对象 = threading.Thread(target=函数,args=参数) -创建一个线程对象,并返回

说明:

函数 -function类型的变量,这个函数的函数体就会在子线程中执行

参数 -元祖,参数会传给target对应的函数

让线程开始执行任务:

线程对象.start() --开始执行子线程中的任务

当某个线程出现异常,是线程直接结束,进程不一定结束,只有所有的线程都结束,进程才结束

threading.current_thread()

3.2创建线程子类

  1. 声明一个类继承threading模块的Thread类
  2. 重写run()方法,这个方法中的任务就是需要在子线程中执行的任务
  3. 创建当前类的对象,就是线程对象
  4. 启动线程(还是通过start()调用)
from threading import Thread,current_thread
class DownLoadThread(Thread):
    def __init__(self,film):
        super().__init__()
        self.film = film
    def run(self):
        print('下载电影:%s  %s',% (self.film,current_thread()))
t1 = DownLoadThread()
t1.start() #线程对象调用start会自动在子线程中去调用run方法
#t1.run()  这个也可以,但是是在主线程中执行因此没有意义

3.3 join的用法

线程对象.join() --程序执行到这个地方会停下来(线程阻塞),直到线程对象中的任务执行完成后才继续执行后面的语句

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容

  • 01.recode 一个进程默认有一个线程,这个线程叫主线程。默认情况下,所有的代码都是在主线程中执行的 开始下载...
    Gary134阅读 120评论 0 0
  • 线程 操作系统线程理论 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有...
    go以恒阅读 1,645评论 0 6
  • 一. 操作系统概念 操作系统位于底层硬件与应用软件之间的一层.工作方式: 向下管理硬件,向上提供接口.操作系统进行...
    月亮是我踢弯得阅读 5,971评论 3 28
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,746评论 0 10
  • 紫玉兰开花 秋风冻雨枯叶阑,雪压细枝孤苞寒。 静待春回吹暖气,始露娇容著紫衫。
    蟹夹水草阅读 314评论 0 0