python字符串常用操作方法

python字符串常用操作方法

python字符串常用操作方法
一、查找
二、修改
三、判断
一、查找
1、find():检测某个⼦串是否包含在这个字符串中,如果在,返回这个⼦串开始的位置下标,否则则返回-1。
语法:字符串串序列列.find(⼦子串串, 开始位置下标, 结束位置下标)

mystr = “hello world and itcast and itheima and Python”
print(mystr.find(‘and’)) # 12
print(mystr.find(‘and’, 15, 30)) # 23
print(mystr.find(‘ands’)) # -1

2、index():检测某个⼦串是否包含在这个字符串中,如果在返回这个⼦子串开始的位置下标,否则报异常。
语法:字符串串序列列.index(⼦子串串, 开始位置下标, 结束位置下标)

mystr = “hello world and itcast and itheima and Python”
print(mystr.index(‘and’)) # 12
print(mystr.index(‘and’, 15, 30)) # 23
print(mystr.index(‘ands’)) # 报错

rfind(): 和find()功能相同,但查找⽅方向为右侧开始。
rindex():和index()功能相同,但查找⽅方向为右侧开始。

3、count():返回某个⼦子串串在字符串串中出现的次数
语法:字符串串序列列.count(⼦子串串, 开始位置下标, 结束位置下标)

mystr = “hello world and itcast and itheima and Python”
print(mystr.count(‘and’)) # 3
print(mystr.count(‘ands’)) # 0
print(mystr.count(‘and’, 0, 20)) # 1

二、修改
1、replace():替换
语法:字符串序列.replace(旧⼦串, 新⼦串, 替换次数)

mystr = “hello world and itcast and itheima and Python”
# 结果:hello world he itcast he itheima he Python
print(mystr.replace(‘and’, ‘he’))
# 结果:hello world he itcast he itheima he Python
print(mystr.replace(‘and’, ‘he’, 10))
# 结果:hello world and itcast and itheima and Python
print(mystr)

字符串类型的数据修改的时候不能改变原有字符串,属于不能直接修改数据的类型即是不可变类型。

2、split():按照指定字符分割字符串。
语法:字符串序列.split(分割字符, num)
num表示的是分割字符出现的次数,即将来返回数据个数为num+1个。

mystr = “hello world and itcast and itheima and Python”
# 结果:[‘hello world ‘, ‘ itcast ‘, ‘ itheima ‘, ‘ Python’]
print(mystr.split(‘and’))
# 结果:[‘hello world ‘, ‘ itcast ‘, ‘ itheima and Python’]
print(mystr.split(‘and’, 2))

3、join():⽤用⼀一个字符或⼦串合并字符串,即是将多个字符串合并为⼀个新的字符串。
语法:字符或⼦串.join(多字符串组成的序列)

list1 = [‘chuan’, ‘zhi’, ‘bo’, ‘ke’]

# 结果:chuan_zhi_bo_ke
print(‘_’.join(list1))

4、字符转换:
capitalize():将字符串*个字符转换成大写
title():将字符串每个单词首字母转换成大写
lower():将字符串中大写转小写
upper():将字符串中⼩写转大写

mystr = “hello world and itcast and itheima and Python”

# 结果:Hello world and itcast and itheima and python
print(mystr.capitalize())

# 结果:Hello World And Itcast And Itheima And Python
print(mystr.title())

# 结果:hello world and itcast and itheima and python
print(mystr.lower())

# 结果:HELLO WORLD AND ITCAST AND ITHEIMA AND PYTHON
print(mystr.upper())

lstrip():删除字符串左侧空白字符
rstrip():删除字符串右侧空⽩字符
strip():删除字符串两侧空白字符

ljust():返回一个原字符串左对齐,并使用指定字符(默认空格)填充⾄至对应⻓度的新字符串。
语法:字符串序列.ljust(⻓度, 填充字符)

rjust():返回⼀个原字符串右对⻬,并使⽤指定字符(默认空格)填充⾄至对应⻓度的新字符串,语法和ljust()相同。
center():返回⼀个原字符串居中对齐,并使⽤指定字符(默认空格)填充⾄对应长度的新字符串,语法和ljust()相同。

三、判断
startswith():检查字符串是否是以指定⼦串开头,是则返回 True,否则返回 False。如果设置开始和结束位置下标,则在指定范围内检查。

mystr = “hello world and itcast and itheima and Python ”
# 结果:True
print(mystr.startswith(‘hello’))
# 结果False
print(mystr.startswith(‘hello’, 5, 20))

endswith()::检查字符串是否是以指定⼦串结尾,是则返回 True,否则返回 False。如果设置开始和结束位置下标,则在指定范围内检查。

mystr = “hello world and itcast and itheima and Python”
# 结果:True
print(mystr.endswith(‘Python’))
# 结果:False
print(mystr.endswith(‘python’))
# 结果:False
print(mystr.endswith(‘Python’, 2, 20))

isalpha():如果字符串至少有⼀个字符并且所有字符都是字母则返回 True, 否则返回 False。
isdigit():如果字符串只包含数字则返回 True 否则返回 False。
isalnum():如果字符串至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回False。
isspace():如果字符串中只包含空白,则返回 True,否则返回False。

mystr1 = ‘hello’
mystr2 = ‘hello12345’
# 结果:True
print(mystr1.isalpha())
# 结果:False
print(mystr2.isalpha())
—————————–
mystr1 = ‘aaa12345’
mystr2 = ‘12345’
# 结果: False
print(mystr1.isdigit())
# 结果:False
print(mystr2.isdigit())
—————————–
mystr1 = ‘aaa12345’
mystr2 = ‘12345-‘
# 结果:True
print(mystr1.isalnum())
# 结果:False
print(mystr2.isalnum())
—————————–
mystr1 = ‘1 2 3 4 5’
mystr2 = ‘ ‘
# 结果:False
print(mystr1.isspace())
# 结果:True
print(mystr2.isspace())

云计算行业面临哪些问题 如何加入云计算行业

云计算行业面临哪些问题?如何加入云计算行业?近几年来,云计算发展迅猛,各行各业都在想办法将自己的业务迁移到云上。然而,在看到云计算所带来的便利的同时,我们也要注意云计算所带来的安全问题。接下来千锋小编就给大家分享云计算所面临的安全问题。

%title插图%num

1、虚拟化带来的虚拟机的系统安全

虚拟化技术在系统组织,降低系统操作代价,改进硬件资源的效率、利用率以及灵活性方面扮演着主要的角色。然而,虚拟化技术本身不仅面临着传统网络已有的安全威胁,还面临着自身引入的安全问题。

如果一个系统感染了病毒,其它系统是否会受到株连,隔离工作能否做好,甚至后台的存储与数据信息是否受影响。如果虚拟机系统崩溃了,是否会对其它虚拟机有影响,这是一个很现实的问题。

2、电子商务的兴起带来的身份认证安全、个人信息安全和交易安全

电子商务成为互联网的一个重要的发展方向,目前,每年全国网络产生的交易额已经占到全年所有交易总额的9%,许多贵重的大件物品也有在网络上面交易的趋势。

因此电子商务交易安全就成为非常迫切的问题,而在这方面,用户的安全防护却显得非常薄弱,个人交易密码被盗,网站或者银行数据库信息泄漏问题层出不穷,成为新的安全热点。

3、云计算如何保证自身关键业务数据的安全

企业把自己的业务放到云端数据中心去,如何系统内的用户可以轻松共享,节约了很多事情。看上去挺美,但是安全问题呢,万一数据泄密呢?

这是每个CIO心里都打鼓的问题,这个问题既是安全问题,又是信息化的规划问题,而且要熟悉云计算的方方面面,到底是拿哪一层做虚拟,怎么来做。这些问题既对安全厂商展现机遇,又提出挑战。

4、移动用户对传统网络的冲击带来的安全问题

随着智能手机的普及和移动互联的发展,移动终端的安全问题正在挑战传统的网络攻防体系。众所周知,以前传统的安全防护是守住我服务器的端口,用防火墙防毒墙和流量监控等铸成一道马其诺防线,这样什么邮件服务器,数据库服务器,以及外面的各种攻击都会被拒之门外。

但是,当移动互联网融入常规网络后,估计由以前的平面变成了立体的了。许多邮件病毒或者攻击程序是从手机或者PDA引入的,这使得常规的防护体系面临巨大的挑战。

企业想要确保云数据安全,就要招聘相应的人才,这就催生了新的高薪行业——云安全工程师。如果你也想加入这个行业,可以选择专业学习一下。

————————————————

原文链接:https://blog.csdn.net/qq_43444478/article/details/113740540

linux设置端口转发(一键设置)

linux设置端口转发

#下载rinetd程序并进入文件夹

wget http://www.boutell.com/rinetd/http/rinetd.tar.gz&&tar -xvf rinetd.tar.gz&&cd rinetd

#修改转发端口范围

sed -i ‘s/65536/65535/g’ rinetd.c mkdir /usr/man&&make&&make install

#设置转发规则,只需要改为自己需要转发的域名和端口就行了

echo ‘0.0.0.0 6379 csdn.net 6379’ >/etc/rinetd.conf

# 0.0.0.0表示当前主机 ,*个6379表示要监听的当前主机端口,csdn.net表示目标地址,第二个6379表示要转发到的目标主机端口

#手动启动rinetd

rinetd

#自动启动

echo rinetd >>/etc/rc.local

将以上修改以上命令中映射的端口,保存到.sh脚本文件就可以一键开启端口映射啦

Python—–笑谈协程

Python—–笑谈协程
1. 协程
​ 协程又称微线程,迁程。Coroutine

​ 协程是python中另外一种实现多任务的方式,只不过比线程占用更小的执行单元。

​ 在一个线程中的某个函数,可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另外一个函数中执行,注意不是通过调用函数的方式做到的,并且切换的次数以及什么时候再切换到原来的函数都由开发者自己确定

2. 协程和线程的差异
​ 实现多任务时,线程切换从系统层面远不止保存和恢复CPU上下文这么简单。操作系统为了程序运行的高效性,每个线程都有自己缓存Cache等数据,操作系统还会帮你做这些数据的恢复工作。所以线程的切换非常耗性能。

​ 但是,协程的切换只是单纯的操作CPU的上下文,一秒钟切换个上百万次系统都可以

import time
def work1():
while True:
print(“—-work1—“)
yield
time.sleep(0.5)
def work2():
while True:
print(“—-work2—“)
yield
time.sleep(0.5)
def main():
w1 = work1()
w2 = work2()
while True:
next(w1)
next(w2)
if __name__ == “__main__”:
main()

—-work1—
—-work2—
—-work1—
—-work2—
—-work1—
—-work2—
—-work1—
—-work2—
—-work1—
—-work2—
—-work1—
—-work2—
…省略…

3. greenlet
from greenlet import greenlet
import time
def test1():
while True:
print “—A–”
gr2.switch()
time.sleep(0.5)
def test2():
while True:
print “—B–”
gr1.switch()
time.sleep(0.5)
gr1 = greenlet(test1)
gr2 = greenlet(test2)
#切换到gr1中运⾏
gr1.switch()

4. gevent
​ greenlet已经实现了协程,但是还是需要人工切换。

​ gevent模块可以实现自动切换

import gevent
def f(n):
for i in range(n):
print(gevent.getcurrent(), i)
g1 = gevent.spawn(f, 5)
g2 = gevent.spawn(f, 5)
g3 = gevent.spawn(f, 5)
g1.join()
g2.join()
g3.join()

实现结果:
<Greenlet at 0x10e49f550: f(5)> 0
<Greenlet at 0x10e49f550: f(5)> 1
<Greenlet at 0x10e49f550: f(5)> 2
<Greenlet at 0x10e49f550: f(5)> 3
<Greenlet at 0x10e49f550: f(5)> 4
<Greenlet at 0x10e49f910: f(5)> 0
<Greenlet at 0x10e49f910: f(5)> 1
<Greenlet at 0x10e49f910: f(5)> 2
<Greenlet at 0x10e49f910: f(5)> 3
<Greenlet at 0x10e49f910: f(5)> 4
<Greenlet at 0x10e49f4b0: f(5)> 0
<Greenlet at 0x10e49f4b0: f(5)> 1
<Greenlet at 0x10e49f4b0: f(5)> 2
<Greenlet at 0x10e49f4b0: f(5)> 3
<Greenlet at 0x10e49f4b0: f(5)> 4

4.1 gevent切换执行
import gevent
def f(n):
for i in range(n):
print(gevent.getcurrent(), i)
#⽤来模拟⼀个耗时操作, 注意不是time模块中的sleep
gevent.sleep(1)
g1 = gevent.spawn(f, 5)
g2 = gevent.spawn(f, 5)
g3 = gevent.spawn(f, 5)
g1.join()
g2.join()
g3.join()

运行结果:
<Greenlet at 0x7fa70ffa1c30: f(5)> 0
<Greenlet at 0x7fa70ffa1870: f(5)> 0
<Greenlet at 0x7fa70ffa1eb0: f(5)> 0
<Greenlet at 0x7fa70ffa1c30: f(5)> 1
<Greenlet at 0x7fa70ffa1870: f(5)> 1
<Greenlet at 0x7fa70ffa1eb0: f(5)> 1
<Greenlet at 0x7fa70ffa1c30: f(5)> 2
<Greenlet at 0x7fa70ffa1870: f(5)> 2
<Greenlet at 0x7fa70ffa1eb0: f(5)> 2
<Greenlet at 0x7fa70ffa1c30: f(5)> 3
<Greenlet at 0x7fa70ffa1870: f(5)> 3
<Greenlet at 0x7fa70ffa1eb0: f(5)> 3
<Greenlet at 0x7fa70ffa1c30: f(5)> 4
<Greenlet at 0x7fa70ffa1870: f(5)> 4
<Greenlet at 0x7fa70ffa1eb0: f(5)> 4

4.2 给程序打补丁
from gevent import monkey
import gevent
import random
import time

def coroutine_work(coroutine_name):
for i in range(10):
print(coroutine_name, i)
time.sleep(random.random())
gevent.joinall([
gevent.spawn(coroutine_work, “work1”),
gevent.spawn(coroutine_work, “work2”)
])

运行结果
work1 0
work1 1
work1 2
work1 3
work1 4
work1 5
work1 6
work1 7
work1 8
work1 9
work2 0
work2 1
work2 2
work2 3
work2 4
work2 5
work2 6
work2 7
work2 8
work2 9

from gevent import monkey
import gevent
import random
import time
# 有耗时操作时需要
monkey.patch_all() # 将程序中⽤到的耗时操作的代码, 换为gevent中⾃⼰实现的模块
def coroutine_work(coroutine_name):
for i in range(10):
print(coroutine_name, i)
time.sleep(random.random())
gevent.joinall([
gevent.spawn(coroutine_work, “work1”),
gevent.spawn(coroutine_work, “work2”)
])

实现结果:
work1 0
work2 0
work1 1
work1 2
work1 3
work2 1
work1 4
work2 2
work1 5
work2 3
work1 6
work1 7
work1 8
work2 4
work2 5
work1 9
work2 6
work2 7
work2 8
work2 9

5. 总结
进程是资源分配的单位
线程是操作系统调度的单位
进程切换需要的资源很*大,效率很低
线程切换需要的资源一般,效率一般
协程切换任务资源很小,效率高
多进程、多线程根据CPU核数不一样可能是并行的,也可能是并发的。
协程的本质就是使用当前进程在不同的函数代码中切换执行,可以理解为并行。
协程是一个用户层面的概念,不同协程的模型实现可能是单线程也就可能是多线程

linux firewall防火墙管理

一. 设置firewall规则
连接阻断在防火墙中有两种,一个是 drop,一个是 reject。

drop 是直接丢弃请求,不返回任何数据,直到客户端连接尝试超时。
reject 是直接断开,并返回 ICMP 错误信息包。
例1:对外暴露8080端口
firewall-cmd –permanent –add-port=8080/tcp
1
例2:使mysql服务的3306端口只允许192.168.1.1/24网段的服务器能访问
添加规则
启用IP名单
firewall-cmd –permanent –add-rich-rule=”rule family=”ipv4″ source address=”192.168.1.1/24″ port protocol=”tcp” port=”3306″ accept”
#reload使生效
firewall-cmd –reload

删除IP名单
firewall-cmd –zone=public –remove-rich-rule=”rule family=’ipv4′ source address=’192.168.1.1/24′ port port=”3306″ protocol=tcp drop” –permanent开启伪装IP
firewall-cmd –permanent –add-masquerade

配置端口转发
firewall-cmd –permanent –add-forward-port=port=3306:proto=tcp:toaddr=192.168.1.2:toport=13306
注意:如果不开启伪装IP,端口转发会失败;其次,要确保源服务器上的端口(3306)和目标服务器上的端口(13306)是开启的。

二. firewall命令
1.启动, 停止, 重启firewalld
停止systemctl stop firewalld.service
启动 systemctl start firewalld.service
重启 systemctl restart firewalld.service
查看状态: systemctl status firewalld
5.禁止firewall开机启动 systemctl disable firewalld
设置开机启用防火墙:systemctl enable firewalld.service
2.查看firewall规则与状态
查看默认防火墙状态(关闭后显示notrunning,开启后显示running)firewall-cmd –state

查看防火墙规则(只显示/etc/firewalld/zones/public.xml中防火墙策略)firewall-cmd –list-all

查看所有的防火墙策略(即显示/etc/firewalld/zones/下的所有策略)firewall-cmd –list-all-zones

重新加载配置文件 `firewall-cmd –reload

3.配置firewalld-cmd
查看版本: firewall-cmd –version
查看帮助: firewall-cmd –help
显示状态: firewall-cmd –state
查看所有打开的端口: firewall-cmd –zone=public –list-ports
更新防火墙规则: firewall-cmd –reload
查看区域信息: firewall-cmd –get-active-zones
查看指定接口所属区域: firewall-cmd –get-zone-of-interface=eth0
拒*所有包:firewall-cmd –panic-on
取消拒*状态: firewall-cmd –panic-off
查看是否拒*: firewall-cmd –query-panic

4. 那怎么开启一个端口呢
添加(–permanent永久生效,没有此参数重启后失效)firewall-cmd –zone=public –add-port=80/tcp –permanent

重新载入(修改规则后使其生效)firewall-cmd –reload

查看 firewall-cmd –zone= public –query-port=80/tcp

删除 firewall-cmd –zone= public –remove-port=80/tcp –permanent

因为在/usr/lib/firewalld/services/中事先定义了ssh.xml的相应的规则

5. 防火墙服务命令
systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。

启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl status firewalld.service
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service
查看已启动的服务列表:systemctl list-unit-files|grep enabled
查看启动失败的服务列表:systemctl –failed

从事云计算要具备什么技能 如何学好云计算架构

从事云计算要具备什么技能?如何学好云计算架构?随着互联网时代的发展以及市场需求推动,云计算应用继云物联、云安全、云存储、云游戏之后得到进一步扩张。云手机、云电视已成为人们生活不可或缺的一部分,各大企业对于云计算人才的需求也进一步加大。很多人都想加入这个行列,那么该如何学习云计算技术呢?下面就给大家分享一下云计算架构的相关知识。

%title插图%num

随着企业的不断壮大以及数据的增多,云计算已无法支持如此复杂的企业环境,而云计算架构正是基于此而诞生。云计算架构主要可分为四层:显示层、中间层、基础设施层和管理层。

显示层:以友好的方式展现用户所需的内容和服务体验,并会利用到下面中间件层提供的多种服务。主要有五种技术:HTML、JavaScript、CSS、Flash和Silverlight。

中间层:承上启下的作用,在下面的基础设施层所提供资源的基础上提供了多种服务,比如缓存服务和REST服务等,而且这些服务即可用于支撑显示层,也可以直接让用户调用。主要有五种技术:REST、多租户、并行处理、应用服务器、分布式缓存。

基础设施层:给上面的中间件层或者用户准备其所需的计算和存储等资源。主要有四种技术:虚拟化、分布式存储、关系型数据库、NoSQL。

管理层:是为横向的三层服务的,并给这三层提供多种管理和维护等方面的技术。

通过云计算架构各层中所包含的应用技术,我们可以了解到当前企业对于云计算架构师的技术要求。而这些只是你从事云计算开发所应具备的基本技能,如果你想成为更高端、更高薪的云计算开发人才,你可以选择专业的学习。
————————————————

原文链接:https://blog.csdn.net/qq_43444478/article/details/114695057

python的重要第三方库你用过多少?

python的重要第三方库你用过多少?

python 能被称作*方便的语言不是没有道理的它的第三方库功能强大到毁天灭地(开个玩笑)
下面就介绍几个特别好用的第三方库给大家提个方向,想详细研究的小伙伴可以到官网查查那么开始。

Python库大全
网络爬虫
数据库
数据分析
机器学习
可视化
文本分析
GUI窗体软件开发
自动化办公
网络爬虫
•requests[1] *好用、*简单的网络爬虫访问库
•BeautifulSoup[2] *简单的网页解析库
•pyquery[3] *简洁网页解析库
•scrapy[4] *流行的爬虫框架
•pyspider[5] 国人开发的爬虫框架
•selenium[6] 浏览器自动化框架,可以用于爬虫反爬
•scylla[7] 智能IP代理池,用于反爬
•shreport[8] 上海证券交易所上市公司定期报告下载
•newspaper[9] 新闻爬虫库,根据提供的url可以抽取出新闻标题、作者、关键词、总结,部分功能支持中文

数据库
•PyMySQL[10]
•Sqlite3[11] 轻量级sql数据库(python内置库)
•pymongo[12] 非关系型MongoDB库
•redis 缓存数据库

数据分析
•pandas[13] 必须Python数据分析库,读取文件、预处理数据、分析、存储
•modin[14] pandas加速库,接口语法与pandas高度一致
•dask[15] pandas加速库,接口语法与pandas高度一致
•plydata[16] pandas管道语法库
•networkx[17] 社交网络分析库

机器学习
•scikit-learn[18] 机器学习必学库,支持有监督、无监督多种算法,含文本分析功能
•Orange3[19] 点击操作的机器学习分析软件, 可文本分析
•doccano[20] 文本数据标注工具
•label-studio[21] *牛掰的文本数据标注工具

可视化
•matplotlib[22] Python中*万能绘图库,很少有ta画不出来的图;但语法较难、静态图
•seaborn[23] 基于matplotlib开发的简化版可视化库, 一般的图可以用ta绘制;高度定制仍需要结合matplotlib进行样式定制;静态图
•plotnine[24] ggplot2语法的Python可视化库, 可与plydata[25] 库结合使用
•pyecharts[26] 国人开发并封装的动态可视化图绘制库; 中文文档
•plotly[27] 动态可视化图绘制库
•bokeh[28] 动态可视化图绘制库
•SciencePlots[29] 科研论文绘图,基于matplotlib
•datapane[30] 数据分析报告生成
•superset[31] 开源商务智能分析可视化库

文本分析
•nltk[32] 自然语言分析套件,对中文不友好
•spacy[33] 工业级自然语言模型库,支持中文
•pattern[34] 自然语言处理、网络分析、可视化库
•jieba[35] 中文文本分词库
•snownlp[36] 中文情感分析库
•gensim[37] *好用、*全的话题模型
•cnsenti[38] 中文情感分析库(Chinese Sentiment))可对文本进行情绪分析、情感分析。
•label-studio[39] *牛掰的文本数据标注工具
•doccano[40] 文本数据标注工具
•textstat[41] 文本可读性计算包(算法全,但仅支持英文)
•texthero[42] 文本预处理、展示、可视化库,仅支持英文

GUI窗体软件开发
•tkinter[43] Python内置的gui库
•PySimpleGUI[44] *简单的gui开发库
•pyqt5、pyside[45] *牛掰的gui软件开发库

自动化办公
•zmail[46] 自动化收发邮件管理库
•pywinauto[47] Windows电脑自动化Python库
•WeasyPrint[48] 自动化生产pdf报告
•selenium[49] 浏览器自动化框架,可以自动化点击浏览器,完成某些工作
•mkdocx[50]
•python-docx[51] 创建、修改docx文件库
•python-ppt[52] 创建、修改ppt文件库
•openpyxl[53] xlsx文件库

现在学云计算是时机吗 如何提升云计算性能

现在是学云计算的时机吗?如何提升云计算性能?随着越来越多的企业将业务迁移到云上,我国云计算市场得到进一步发展。很多企业致力于追求更佳的应用程序性能,但实现它并非易事,不过我们可以通过适当的服务和设计来提升企业云应用程序的性能,下面就给大家分享几个提升云计算性能的好方法。

%title插图%num

1、实施自动扩展服务

组织须实施适当的规则集,以决定何时以及如何扩展、提高云计算性能。在许多情况下,监控服务跟踪负载特性,例如平均vCPU利用率。当工作负载超过定义的利用率阈值时,监视警报会触发自动扩展服务,该服务遵循预定义的计划来添加资源,并设置负载平衡首选项。当负载降至某个阈值以下时,自动扩展服务可以反转该过程并撤回不需要的资源。

2、选择适当的实例

云计算提供商提供很多的实例类型,很多类型都具有vCPU、内存、存储和网络的独特组合。可以针对特定任务定制这些虚拟机。例如,AWS公司的EC2 A1实例适合横向扩展和ARM工作负载。另一方面,M4实例平衡了不同应用程序的资源,并有一些针对计算密集型工作负载、内存密集型应用程序、人工智能等进行了优化的云计算实例。这些使得组织须选择正确的选项。

3、采用微服务架构

微服务将应用程序分解为一系列相互关联的程序,这些程序单独部署、操作和扩展。这些独立服务通过API协同工作,以提供应用程序的特性和功能。因此,当一项服务对其性能限制征税时,只有该服务很大程度上须向外扩展。它可以成为管理现代应用程序的一种更快、资源效率更高的方法。

4、实施缓存服务

缓存是放置在尽可能快的存储中的频繁访问数据的副本,位于尽可能靠近应用程序的位置。与使用常规存储等待数据相比,应用程序可以使用缓存信息更快地执行涉及数据的任务。云中可用的缓存服务包括Azure Cache for Redis、Amazon ElastiCache和Google App Engine Memcache。应用程序开发人员需要规划如何更新缓存内容,以确保主体数据存储和缓存之间的连续性。云计算提供商提供了丰富的文档和参考架构,以帮助完成设计过程。

5、选择监控服务

即使监控对工作负载性能没有直接影响,这些服务也是公共云中很多部署的关键要素。监控是跟踪性能指标的客观方法,它为自动扩展等服务决策提供了基础,并帮助组织确保其云计算投资产生的结果。公共云提供商提供各种监控服务,包括Amazon CloudWatch、GCP Stackdriver Monitoring和Azure Monitor。

6、采用事件驱动的架构

无服务器计算已经获得了开发人员的很大关注,事件驱动的架构可以在无服务器的云计算服务上运行,例如AWS Lambda,Azure Functions和Google Cloud Functions。虽然很少有应用程序完全由事件驱动,但开发人员可以使用功能来创建对实际和基于软件的事件(如物联网数据流)的高效响应。因此,由于无服务器组件,整个软件应用程序可以更小、更简单,并且针对性能进行了更好的优化。

凭借灵活配置、资源利用率高和节省成本的优势,我国云计算市场得到迅猛发展。分析预计,云计算市场未来4到5年内将会保持至少30%以上的增长水平,到2020年时云计算的市场规模至少可达约6866亿元左右。如果你想加入这个前途广阔的行业,现在正是好时机。
————————————————

原文链接:https://blog.csdn.net/qq_43444478/article/details/115526370

Python实现用手机监控远程控制电脑

Python实现用手机监控远程控制电脑

 

C语言数据结构与算法
数据结构是一门研究数据之间关系的一门课程,是编程境界提升的一大跳板,学好数据结构对提升编程能力有很大的帮助。 本次专栏全部使用C语言作为实践语言,带大家全面的了解数据结构和算法。以*直观的例子,让大家认识到各个数据结构,一级一些我们经常使用的算法和一些非常有趣的算法。希望本专栏可以给大家带来帮助。
ZackSock
¥19.90
订阅专栏
一、前言
很多时候,我们都有远程控制电脑的需求。比如正在下载某样东西,需要让电脑在下载完后关机。或者你需要监控一个程序的运行状况等。

今天我们就来用Python实现一个远程监控并控制电脑的小程序。

二、实现原理
听起来远程控制电脑好像很高级的样子,但是实现起来其实非常简单。实现原理如下:

运行程序,让程序不停地读取邮件
用手机给电脑发送邮件
判断是否读取到指定主题的邮件,如果有,则获取邮件内容
根据邮件内容,执行预设的函数
与其说是学习如何远程控制电脑,还不如说是学习如何读取邮件。当然,上面的的流程只实现了远程控制电脑,而没实现对电脑的监控。而监控的操作可以以截图的方式来进行。

我们可以预设一个指令,当读取到邮件内容为grab时,我们就发送电脑截图。如何将电脑截图发送给手机邮箱,这样就达到了监控的效果。

关于如何发送邮件可以参考博客:如何用Python发送邮件?。这里就不再详细说了。下面我们看看如何读取邮件。

三、读取邮件
读取邮件需要使用到imbox模块,安装语句如下:

pip install imbox
1
读取邮件的代码如下:

from imbox import Imbox

def read_mail(username, password):
with Imbox(‘imap.163.com’, username, password, ssl=True) as box:
all_msg = box.messages(unread=True)
for uid, message in all_msg:
# 如果是手机端发来的远程控制邮件
if message.subject == ‘Remote Control’:
# 标记为已读
box.mark_seen(uid)
return message.body[‘plain’][0]

首先我们用with语句,打开邮箱。然后通过下面语句获取所有的未读邮件:

all_msg = box.messages(unread=True)
1
获取未读邮件后,对邮件进行遍历。将主题为“Reomte Control”的邮件标记为已读,并返回文本内容。

这里需要注意,因为我们筛选出了主题为“Remote Control”的邮件,因此我们在用手机发邮件的时候需要将主题设置为“Remote Control”,这样可以避免其它邮件的干扰。

四、截图
截图需要使用到PIL模块,安装如下:

pip install pillow
1
截图的代码很简单:

from PIL import ImageGrab

def grab(sender, to):
# 截取电脑全屏
surface = ImageGrab.grab()
# 将截屏保存为surface.jpg
surface.save(‘surface.jpg’)
# 将截屏发送给手机
send_mail(sender, to, [‘surface.jpg’])

其中send_mail的代码如下:

import yagmail

def send_mail(sender, to, contents):
smtp = yagmail.SMTP(user=sender, host=’smtp.163.com’)
smtp.send(to, subject=’Remote Control’, contents=contents)

关于发送邮件的介绍可以参考上面提到的博客。

五、关机
关机的操作非常简单,我们可以用python来执行命令行语句即可。代码如下:

import os

def shutdown():
# 关机
os.system(‘shutdown -s -t 0’)

除了关机,我们还可以执行很多操作。对于一些复杂的操作,我们可以预编写一些bat文件,这里就不演示了。

六、完整代码
上面我们编写了各个部分的代码,然后再来看看主体部分的代码:

def main():
# 电脑用来发送邮件已经电脑读取的邮箱
username = ‘sockwz@163.com’
password = ‘********’

# 手机端的邮箱
receiver = ‘2930777518@qq.com’

# 读取邮件的时间间隔
time_space = 5

# 注册账户
yagmail.register(username, password)

# 循环读取
while True:
# 读取未读邮件
msg = read_mail(username, password)
if msg:
# 根据不同的内容执行不同操作
if msg == ‘shutdown’:
shutdown()
elif msg == ‘grab’:
grab(username, receiver)
time.sleep(time_space)

其中:

yagmail.register(username, password)
1
会使用到keyring模块,安装如下:

pip install keyring
1
后面我们可以根据自己的需求编写一些其它功能。下面是完整的代码:

import os
import time
import yagmail
from imbox import Imbox
from PIL import ImageGrab

def send_mail(sender, to, contents):
smtp = yagmail.SMTP(user=sender, host=’smtp.163.com’)
smtp.send(to, subject=’Remote Control’, contents=contents)

def read_mail(username, password):
with Imbox(‘imap.163.com’, username, password, ssl=True) as box:
all_msg = box.messages(unread=True)
for uid, message in all_msg:
# 如果是手机端发来的远程控制邮件
if message.subject == ‘Remote Control’:
# 标记为已读
box.mark_seen(uid)
return message.body[‘plain’][0]

def shutdown():
os.system(‘shutdown -s -t 0’)

def grab(sender, to):
surface = ImageGrab.grab()
surface.save(‘surface.jpg’)
send_mail(sender, to, [‘surface.jpg’])

def main():
username = ‘sockwz@163.com’
password = ‘你的授权码’
receiver = ‘2930777518@qq.com’
time_space = 5
yagmail.register(username, password)
while True:
# 读取未读邮件
msg = read_mail(username, password)
if msg:
if msg == ‘shutdown’:
shutdown()
elif msg == ‘grab’:
grab(username, receiver)
time.sleep(time_space)

if __name__ == ‘__main__’:
main()

 

云计算要具备什么技能 如何学好云计算架构

云计算要具备什么技能?如何学好云计算架构?随着互联网时代的发展以及市场需求推动,云计算应用继云物联、云安全、云存储、云游戏之后得到进一步扩张。云手机、云电视已成为人们生活不可或缺的一部分,各大企业对于云计算人才的需求也进一步加大。很多人都想加入这个行列,那么该如何学习云计算技术呢?下面就给大家分享一下云计算架构的相关知识。
%title插图%num

随着企业的不断壮大以及数据的增多,云计算已无法支持如此复杂的企业环境,而云计算架构正是基于此而诞生。云计算架构主要可分为四层:显示层、中间层、基础设施层和管理层。

显示层:以友好的方式展现用户所需的内容和服务体验,并会利用到下面中间件层提供的多种服务。主要有五种技术:HTML、JavaScript、CSS、Flash和Silverlight。

中间层:承上启下的作用,在下面的基础设施层所提供资源的基础上提供了多种服务,比如缓存服务和REST服务等,而且这些服务即可用于支撑显示层,也可以直接让用户调用。主要有五种技术:REST、多租户、并行处理、应用服务器、分布式缓存。

基础设施层:给上面的中间件层或者用户准备其所需的计算和存储等资源。主要有四种技术:虚拟化、分布式存储、关系型数据库、NoSQL。

管理层:是为横向的三层服务的,并给这三层提供多种管理和维护等方面的技术。

通过云计算架构各层中所包含的应用技术,我们可以了解到当前企业对于云计算架构师的技术要求。而这些只是你从事云计算开发所应具备的基本技能,如果你想成为更高端、更高薪的云计算开发人才,你可以选择专业的学习。