使用协程实现简单爬虫和事件驱动与异步ioの处理

协程(微线程)
一种用户态的轻量线程。
拥有自己的寄存器和上下文栈。协程调度切换的时候,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器的上下文和栈。因此协程能调用上一次调用时的状态(即所有的一个局部状态的一个特定组合),每次过程重入时,相当于进入上一次调用的状态,就是进入上一次离开所处的逻辑流的位置。
协程的好处
1.无需线程上下文切换的开销
2.无需原子操作锁定及切换的开销
3.方便切换控制流,简化编程模型
4.高并发+高扩展性+低成本:一个cpu支持上万的协程都没有问题,所以很适用与高并发处理。
事件驱动与异步io

read more

多进程queue·pipe·manager·进程锁

Queue (队列)
作用
1:解耦,使程序实现松耦合。
2:提高运行效率
生产消费模型:
在并发编程中通过生产者消费者模型解决大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体数据的处理速度
Io 操作不占用cpu
计算占用cpu
上下文切换也需要消耗资源,所以大量的计算如果使用多线程可能不一定快,不一定会比单线程快。所以python的多线程不适合cpu密集操作型的任务,适合io密集型的任务。
两个进程都是独立的,无法互相访问,必须找一个中级件。
read more

线程锁和递归锁和信号量和Event的简单使用

线程锁:
保证同一数据同时只修改一次,避免出错.
虽然python3自带这个锁,但是你还是需要添加这个锁,
因为官方并没有声明它带这个锁。
递归锁:
一把大锁中还包含一把子锁。
Locks = {
Door1:key1
Door2:key2
}
信号量:
互斥锁同时只允许一个线程更改数据,而信号量同时允许一定数量的线程更改数据。
Events 事件
其实就是在对全局变量不断的修改,只不过是在上面 封装了一层。
read more

多线程的概念简单多线程的实现和守护进程和全局解释器锁

多线程

系统软件都是通过操作系统(os)去调用cpu进行运算。
每个程序启动会分一块空间,硬盘(自行车)慢,内存(高铁)快,cpu(火箭)还要比内存快好多。cpu有一个时钟频率,代表中断多少次,每中断就能执行一次指令。
每一个程序的内存是独立的
线程————-》一堆指令
操作系统调度cpu最小单位就是线程。线程被包含在进程之中,是进程中一个单一顺序的控制流。一个进程可以并发多个线程,每条线程执行不同的。

进程:一个程序(例如qq)要以一个整体的形式暴露给操作系统管理,里面包含对各种资源的调用,内存的管理,网络接口的调用等。对各种资源管理的集合就可以称为进程。
进程 要操作cpu ,必须先创建一个线程,进程不能执行它是资源的集合。所有在一个同一个进程里的线程是共享同一块内存空间的。

一个cpu只能同时干一件事,但给了你能同时做多个任务的幻觉,因为它进行了上下文的切换,从停止的位置继续做。因为它太速度快了,你切换一次的任务时间能完成n次切换。一个线程就是一堆上下文在寄存器中的组合,线程和进程是不一样的,进程是一堆相关的进行运算的资源的集合,像一个屋子能做多个人和一个人,澄清一下,进程的相关资源包含内存的空间地址,所有在一个同一个进程里的线程是共享同一块内存空间的。

进程,一个程序的执行实例,每一个进程提供执行这个程序所用的所有资源,虚拟的地址空间,可执行的代码,调用的操作系统的接口,安全的权限,唯一的进程标识符(pid),优先级类,最小最大工作所需要的内存空间,至少使用一个线程,当启动一个进程的时候会自动启动一个线程,进程里的第一个线程就是主线程, 子线程是通过主线程创建的,但是子线程是独立的,主线程关闭子线程不会关闭。用各个线程创建子线程。
read more

paramiko连接远程服务器实现ssh客户端和使用秘钥无密码登录

用python 实现ssh客户端 (用于连接远程服务器)
直接写用户名密码在配置文件里是不安全的,可以不用密码,用秘钥来连接
ssh秘钥
RSA —非对称秘钥验证

公钥 public key
私钥 private key
10.0.0.31 ——>10.0.0.41
私钥 公钥
rwx rwx rwx r读w写x执行 用数字表示rwx—>421
属主 属组 others
chmod 777 authorized_key 改变权限变成777
所以改变权限变成777所有人都能访问 你要自己才能读写要改成600
先生成一对公钥私钥
read more

简单的socket网络通信的实现p2

1.实现简单的ssh服务端
客户端输入 命令行命令,服务器端返回数据传送到客户端。

2.ftp server
步骤
1.读取文件名
2.检测文件是否存在
3.打开文件
4.检测文件大小
5.发送文件大小给客户端
6.等客户端确认(防止粘包)
7.开始边读边发数据
8.发送 Md5值

实现文件的传输,通过md5值校对来判断文件是否丢包

read more