自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(548)
  • 收藏
  • 关注

原创 Python中pymongo的简单使用

一,增import pymongomy_client = pymongo.MongoClient("mongodb://localhost:27017/")# db_list = my_client.list_database_names()# for db in db_list:# print(db)my_db = my_client['vdb']# col_list = my_db.list_collection_names()## for col in col_lis

2021-02-22 18:24:50 858

原创 CentOS8系统的网卡启动命令

1.概述因为CentOS 8系统,弃用了network.service ,采用NetworkManager(NM)为网卡启用命令,当然CentOS 8 也可以安装network.service作为网卡服务,但是为了适应版本,我们在这里还是得来看下nmcli的命令的使用。网卡停止和启动命令:启动 nmcli connection down ens33停止 nmcli connection up ens33重启命令:[root@localhost ~]# nmcli connection relo

2021-02-22 17:06:38 890

原创 使用firewall打开端口后使用telnet无法通过的问题

一,打开防火墙端口firewall-cmd --zone=public --add-ports=8888/tcp --permanent二,重启防火墙,让新增的端口生效,此步必须做,不然虽然已加成功,但是仍不会生效firewall-cmd --reload三,查看已开放端口firewall-cmd --list-ports四,当然是启动使用端口的服务了...

2021-02-22 16:34:53 2896

原创 Python使用pymysql操作数据库

一,安装:在python3中,自带pip3,所以可以直接使用pip3去安装所需的模块:pip3 install pymysql二,连接import pymysqlconnection = pymysql.connect(host='localhost', user='root', password='', ..

2021-02-21 22:33:34 343

原创 Python修改pip源为国内源

临时修改:在后边加个-i参数指定pip源,如下所示:pip3 install package_name -i https://pypi.tuna.tsinghua.edu.cn/simple永久修改:需要修改配置文件Windows:进入%APPDATA%目录,例如我的是C:\Users\Raytine\AppData\Roaming 新建pip文件夹,如果有则跳过 进入pip文件夹,新建pip.ini文件,设置pip源,如下所示为清华大学的pip源: [global]..

2021-02-21 22:22:04 344 1

原创 CentOS8安装screen

一,首先使用阿里云的源cd /etc/yum.repos.d/cp CentOS-Linux-BaseOS.repo CentOS-Linux-BaseOS.repo_bak && rm -rf CentOS-Linux-BaseOS.repocurl -o /etc/yum.repos.d/CentOS-Linux-BaseOS.repo https://mirrors.aliyun.com/repo/Centos-8.repoyum makecache二,此时安装会

2021-02-20 21:30:49 1131

原创 Python使用Socket / tcp实现简易静态文件服务器

import socketfrom multiprocessing import Processimport reHOME_DIR = './html'server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 允许端口被重复绑定,放在bind前server_socket.bind(.

2021-02-17 15:36:01 232 1

原创 Pycharm设置连接远程服务器同步到本地

第一步:需要设置远程服务器信息类型选择sftp,点击第二个箭头处配置服务器密码等信息,第三个箭头为需同步的远程服务器地址设置需要同步到本地的目录:这时就可以查看远程服务器上的信息了,通常出现在编辑器的右侧二,配置解释器为远程服务器上的python解释器 File ---> Settings---->搜索inter即可出现,点击设置按钮,点击Add,输入远程服务器的地址和用户输入密码并选择使用的python解释器后点击Finish即可此时即可选择刚刚

2021-02-17 15:10:22 3733 3

原创 Python简单服务器

import socketfrom multiprocessing import Processserver_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 允许端口被重复绑定,放在bind前server_socket.bind(('', 8000))server_socket.list.

2021-02-16 16:44:14 165 2

原创 Python中使用tcp时关于Listen的理解

2021-02-13 16:49:26 679

原创 浏览器访问一个网站(baidu.com)的过程

2021-02-13 15:23:12 2609

原创 路由器组网过程

如上图,当从pc2 ping pc3时,pc2所在ip段为192.168.1.x , pc3 所在ip段为192.168.2.x,不在同一i网段内。在数据包发送的过程中,dest_ip 与 src_ip不会发生变化,但是mac地址,会随着设备的不断变化而变化。...

2021-02-13 14:51:51 463

原创 集线器组网与交换机组网的区别

一,集线器的特点hub(集线器)能够完成多个电脑的链接 每个数据包的发送都是以广播的形式进行的,容易堵塞网络二,交换机的特点转发过滤:当一个数据帧的目的地址在MAC地址表中有映射时,它被转发到连接目的节点的端口而不是所有端口(如该数据帧为广播帧则转发至所有端口) 学习功能:以太网交换机了解每一端口相连设备的MAC地址,并将地址同相应的端口映射起来存放在交换机缓存中的MAC地址表中 交换机能够完成多个电脑的链接 每个数据包的发送都是以广播的形式进行的,容易堵塞网络 如果PC不知目标IP所对

2021-02-13 11:51:42 1133

原创 tcp模拟QQ聊天,未使用线程和进程时

服务端:from socket import *server_socket = socket(AF_INET, SOCK_STREAM)bind_addr = ('', 7788)server_socket.bind(bind_addr)server_socket.listen(5)while True: client_socket, client_addr = server_socket.accept() # 当有新的客户端连接进来,就会产生一个新的套接字,clien

2021-02-13 11:46:56 149 1

原创 Python使用tcp作为客户端

from socket import *client_socket = socket(AF_INET, SOCK_STREAM)ser_addr = ('192.168.100.195', 5566) # tcp作为客户端需要连接的服务端地址client_socket.connect(ser_addr)client_socket.send('哈哈'.encode('gbk'))recv_data = client_socket.recv(1024) # 执行到这里会阻塞等待接收服务端发送.

2021-02-13 11:20:13 133

原创 Python的tcp服务端

from socket import *tcpSocket = socket(AF_INET, SOCK_STREAM)bind_addr = ('', 5522)tcpSocket.bind(bind_addr)tcpSocket.listen(5)new_socket, client_addr = tcpSocket.accept()recv_data = new_socket.recv(1024)# recvfrom()也能用,返回的是元祖,第二个元素为None,因为accept返回.

2021-02-13 11:11:39 137

原创 python的进制转换及字节串大端小端

什么叫小端,什么叫大端?纯属个人理解,还未深入。小端即在内存中低位存储的是小数据,高位存的是大数据,比如12345(一万两千三百四十五),123存储在高位,45存储在低位,这就是小端。如上数据反过来,45存储在高位,123存储在低位则叫做大端。整数之间的进制转换:10进制转16进制: hex(16) ==> 0x10 16进制转10进制: int('0x10', 16) ==> 16二进制与八进制同理:bin(1) ==> 01 int('...

2021-02-12 15:28:43 6584 2

原创 Python使用UDP实现简易聊天室

from socket import *import threadingdef send_data(): while True: data = input('<<') # 行首会一直有<< 等待输入 udp_socket.sendto(data.encode('gbk'), (dest_ip, dest_port))def receive_data(): while True: content, add.

2021-02-11 15:46:12 528 3

原创 Python udp聊天室还未使用线程时,一些有意思的理解

还未使用线程时,一些有意思的理解from socket import *import threadingudp_socket = socket(AF_INET, SOCK_DGRAM)bind_addr = ('', 8899)udp_socket.bind(bind_addr)def send_data(addr): data = input('') # 只要终端上有数据就会被识别到里面,即虽然程序会在下方while True堵塞,当有输入时,data会 # 依次.

2021-02-11 14:48:11 129 2

原创 Python自定义类的实现方式(元类)

一,使用函数实现def upper_attr(class_name, class_parents, class_attr): new_attr = {} for name, value in class_attr.items(): if not name.startswith('__'): new_attr[name.upper()] = value # 将属性名转为大写后返回给创建的类 return type(class_name,

2021-02-10 16:59:08 1026 2

原创 Python调用父类初始化方法时不使用super()的一些问题

class Base(object): def __init__(self): print("enter Base") print("leave Base")class B(Base): def __init__(self): print("enter B") Base().__init__() print("leave B")class A(Base): def __init__(self.

2021-02-10 16:06:54 704

原创 Python多继承方式及顺序

深度优先 or 广度优先python2中经典类使用的是深度优先,新式类使用的是广度优先python3经典类与新式类都是广度优先。一图以蔽之:如图,B 继承 A, C 继承 A, D 继承 B 和 C。深度优先遍历是从 D 开始往上搜索到 B,若 B 没有数据,则继续往上搜索到 A,当A中再次没有时才会到C,即深度找不到才会到广度广度优先遍历是从 D 开始往上搜索到 B,若 B 没有数据,则搜索和 B 同级的 C 里的数据,若同级的 C 里还是没有数据,再继续往上搜索到 A ,即广

2021-02-10 15:15:32 546 2

原创 Python的super()一些探索

class Base(object): def __init__(self): print("enter Base") print("leave Base")class A(Base): def __init__(self): print("enter A") super(A, self).__init__() print("leave A")class B(Base): def __ini.

2021-02-10 15:04:36 132

原创 udp协议

1,udp协议是面向数据的,即是无连接的通信协议,因传输数据无需连接,且没有超时重发等机制,故而传输速度优于tcp。2,udp是无连接的协议,每个数据报文都是一个独立的信息。包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证。3,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。 UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内。4,UDP是一个不可靠的协议,发送

2021-02-10 09:48:42 663

原创 Python的GIL

什么是 GIL 呢?GIL 是最流行的 CPython 解释器(平常称为 Python)中的一个技术术语,中文译为全局解释器锁,其本质上类似操作系统的 Mutex(互斥锁)。GIL 的功能是:在 CPython 解释器中执行的每一个 Python 线程,都会先锁住自己,以阻止别的线程执行。当然,CPython 不可能容忍一个线程一直独占解释器,它会轮流执行 Python 线程。这样一来,用户看到的就是“伪”并行,即 Python 线程在交替执行,来模拟真正并行的线程。所以,在python中的多线程是伪

2021-02-09 21:14:32 155 1

原创 Python多进程中的异步回调 callback

from multiprocessing import Poolimport osimport timedef test(): print('test pid is %d and ppid is %d' % (os.getpid(), os.getppid())) for i in range(3): print('----i--- is %d' % i) time.sleep(1) return 'haha' # 这个返回值会传递给ca.

2021-02-09 17:21:41 1498 1

原创 Python多线程中threadingLocal的使用

在多线程使用中,往往各个线程需要获取一些数据,来回传递会很不方便,基于此有threadingLocal解决。一个ThreadLocal变量虽然是全局变量,但每个线程都只能读写自己线程的独立副本,互不干扰。ThreadLocal解决了参数在一个线程中各个函数之间互相传递的问题import threadingimport time# 创建全局ThreadLocal对象local_school = threading.local()def process_student(): #.

2021-02-09 17:04:06 563

原创 Python的队列queue在多线程中的应用

import threadingimport timefrom queue import Queueclass Producer(threading.Thread): def __init__(self): threading.Thread.__init__(self) def run(self): count = 0 while True: if queue.qsize() < 300: .

2021-02-09 16:26:51 628

原创 Python多线程的同步应用操作

首先解释下什么是同步:同步就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。"同"字从字面上容易理解为一起动作其实不是,"同"字应是指协同、协助、互相配合。如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。from threading import Thread, Lockimport timeclass Test1(Thread): def __init_

2021-02-09 15:35:07 332

原创 对于多线程死锁的银行家算法

[背景知识]一个银行家如何将一定数目的资金安全地借给若干个客户,使这些客户既能借到钱完成要干的事,同时银行家又能收回全部资金而不至于破产,这就是银行家问题。这个问题同操作系统中资源分配问题十分相似:银行家就像一个操作系统,客户就像运行的进程,银行家的资金就是系统的资源。[问题的描述]一个银行家拥有一定数量的资金,有若干个客户要贷款。每个客户须在一开始就声明他所需贷款的总额。若该客户贷款总额不超过银行家的资金总数,银行家可以接收客户的要求。客户贷款是以每次一个资金单位(如1万RMB等)的方式进行的

2021-02-09 14:51:13 151

原创 Python多线程的死锁

import threadingimport timedef test1(): if mutex_a.acquire(): print(str(threading.current_thread()) + '----do1----up') time.sleep(1) if mutex_b.acquire(): print(str(threading.current_thread()) + '----do1---down'.

2021-02-09 14:50:03 199

原创 Python默认线程名称及局部变量不会被其他线程篡改

import threadingimport timedef test(sleep_time): num = 1 time.sleep(sleep_time) num += 1 print('-----(%s)---num=%d--sleep=%d' % (threading.current_thread(), num, sleep_time))t1 = threading.Thread(target=test, args=(5,)) # 创建线程的代码在前.

2021-02-09 13:53:22 214

原创 Python互斥锁

from threading import Thread, Lockimport timeg_num = 0def test1(): global g_num for i in range(1000000): mutex_flag = mutex.acquire(True) # True表示堵塞,即如果这个锁在上锁前已被其他线程上锁,那么当前线程会一直卡在这里等待 # False表示非堵塞,即不管本次调用能否成功上锁,都不会卡在这.

2021-02-09 10:02:52 150

原创 Python多线程对全局数据进行修改时可能遇到的问题

from threading import Threadimport timeg_num = 0def test1(): global g_num for i in range(1000000): g_num += 1 print("---test1---g_num=%d" % g_num)def test2(): global g_num for i in range(1000000): g_num += 1.

2021-02-08 16:01:46 777 1

原创 Python进程与线程有什么不同,进程与线程对比

功能进程,能够完成多任务,比如 在一台电脑上能够同时运行多个QQ 线程,能够完成多任务,比如 一个QQ中的多个聊天窗口定义的不同 进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必需的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 区别 一个程序至少有一个进程,一个进程至少有一个线程.

2021-02-08 11:40:42 131 3

原创 Python线程间共享全局变量

from threading import Threadimport timedef worker1(num): num.append(44) print('in worker1 g_num is', num)def worker2(num): time.sleep(1) # 保证worker1线程先执行完 print('in worker2 g_num is', num)g_num = [11, 22, 33]t1 = Thread(target.

2021-02-08 11:35:20 393

原创 Python多线程的执行顺序及状态

import threadingimport timeclass MyThread(threading.Thread): def run(self): for i in range(3): time.sleep(1) msg = "I'm " + self.name + '@' + str(i) print(msg)def test(): for i in range(5): .

2021-02-08 10:52:32 1457 2

原创 Python重写threading.Thread类实现自定义线程

import threadingimport timeclass MyThread(threading.Thread): def run(self): for i in range(3): time.sleep(1) msg = "I'm " + self.name + '@' + str(i) # name属性保存的是当前线程的名称没有传入则默认Thread-num num为正整数 print(ms.

2021-02-08 10:27:44 1229

原创 Python的threading多线程

import threadingfrom time import sleep, ctimedef sing(): for i in range(3): print('我正在唱歌') sleep(1)def dance(): for i in range(3): print('我正在跳舞') sleep(1)if __name__ == '__main__': print('开始%s:' % ctim.

2021-02-08 10:05:12 79

原创 Python使用进程池的时候进程通信实现使用Manager().Queen()

from multiprocessing import Pool, Queue, Managerimport timeimport randomdef write(que): for val in ['A', 'B', 'C', 'D']: print('开始写入数据%s' % val) que.put(val) time.sleep(random.random() * 2)def read(que): print('开始读取.

2021-02-06 22:15:06 306 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除