华为云计算 云知识 基于ModelArts学习Python正则表达式、多线程执行任务和Python魔法方法的使用
基于ModelArts学习Python正则表达式、多线程执行任务和Python魔法方法的使用

相信很多小伙伴体验沙箱实验《使用ModelArts中开发工具学习Python(初级)》后,对Python变成语言有了一个基础的认知,掌握了Python基础的语法和使用方式。它的魅力远不止于此,在本文中,我们一起来感受和学习Python变成语言的正则表达式和多线程高级用法,以及神秘的魔法方法。话不多说,进入实验,我们马上体验!

环境准备

在环境准备中,根据手册提示创建一个用于存放操作数据的 对象存储服务 OBS:

创建配置:

① 区域:华北-北京四

② 数据冗余存储策略:单AZ存储

③ 桶名称:自定义即可(需要记住此名称以备后续步骤使用)

④ 存储类别:标准存储⑤ 桶策略:私有

⑥ 默认加密:关闭

⑦ 归档数据直读:关闭

images_16103466386153

(创建 对象存储 服务OBS)

创建一个ModelArts Notebook,Notebook创建好后选择conda-python3打开,开始Python的奇妙之旅。

创建配置:

① 计费方式:按需计费

② 名称:任意

③ 自动停止:关闭

④ 工作环境:Python3

⑤ 资源池:公共资源池

⑥ 类型:CPU

⑦ 规格:2核8GiB

⑧ 存储配置:对象存储服务(OBS)

⑨ 存储位置:OBS文件夹

images_161034665657533

(创建ModelArts Notebook)

images_161034669707690

多线程体验

多线程,是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。Python的多线程操作跟电脑同时多任务运行,而且不杀后台,这样很多耗时长的任务我们就可以放到后台处理。但是每个现成都需要有一个应用程序来承载,不能够独立的执行任务。运行以下代码,来看看多线程是如何操作的

运行下方代码,实现Python的多线程:

import threading

from time import sleep,ctime

 

def work1():

    for i in range(3):

        print("work1正在执行...%d"%i)

        sleep(1)

 

def work2():

    for i in range(3):

        print("work2正在执行...%d"%i)

        sleep(1)

 

if __name__ == '__main__':

    print('---开始---:%s'%ctime())

    t1 = threading.Thread(target=work1) # 线程1

    t2 = threading.Thread(target=work2) # 线程2

# 启动线程

    t1.start()

    t2.start()

sleep(5)

 

print('---结束---:%s'%ctime())

运行同步代码,可查看到已经创建2个线程,让他们各自对g_num加1000000次:

import threading

import timeg_num = 0

def test1(num):  

global g_num        # 使用全局变量

for i in range(num):       

mutex.acquire()  # 上锁       

g_num += 1       

mutex.release()  # 解锁   

print("---test1---g_num=d"g_num)

def test2(num): 

global g_num   

for i in range(num):

        mutex.acquire()  # 上锁       

g_num += 1

mutex.release()  # 解锁   

 

print("---test2---g_num=d"g_num)

# 创建一个互斥锁

# 默认是未上锁的状态,可以删除锁后查看资源争夺的结果

mutex = threading.Lock()

# 创建2个线程,让他们各自对g_num加1000000次

p1 = threading.Thread(target=test1, args=(1000000,))

p1.start()

p2 = threading.Thread(target=test2, args=(1000000,))

p2.start()

# 等待计算完成time.sleep(5)print("2个线程对同一个全局变量操作之后的最终结果是:s"  g_num)

images_161034678307925

正则表达式

正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。re.match 方法尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None。

运行下方代码,使用re模块进行字符串的匹配

import re

print(re.match('www', 'www.huawei.com').span())  # 在起始位置匹配

print(re.match('com', 'www.huawei.com'))  # 不在起始位置匹配

images_16103468656514

images_161034687146189

运行下方代码,可用re.search 方法扫描整个字符串并返回第一个成功的匹配

import re

line = "Cats are smarter than dogs"

searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)

if searchObj:

    print("searchObj.group() : ", searchObj.group())

    print("searchObj.group(1) : ", searchObj.group(1))

    print("searchObj.group(2) : ", searchObj.group(2))

else:

    print("Nothing found!!" )

images_161034699769734

运行下方代码,一起来感受下Python 的 re 模块,re.sub 方法用于替换字符串中的匹配项:

import re 

phone = "2019-0101-000 # 这是一个电话号码"

# 删除字符串中的 Python注释

num = re.sub(r'#.*$', "", phone)

print("电话号码是: ", num)# 删除非数字(-)的字符串

num = re.sub(r'D', "", phone)

print("电话号码是 : ", num)

images_161034702694824

魔法方法

在感受完Python的多线程和正则表达式后,更不能错过这个神奇的东西——魔法方法,所谓魔法方法,是指在Python中,有一些内置好的特定的方法,这些方法在进行特定的操作时会自动被调用,比如_init__:初始化函数,在创建实例对象时,为实例属性赋值使用。不信,我们可以试试运行下方代码,则会返回结果:小狗:dog。

class Dog(object):

    def __init__(self, name):

        self.name = name       

print("小狗:%s"%(self.name))

dog = Dog("dog")

images_16103470545424

images_161034706249235

  通过本次实验,可以轻松体验Python编程语言的高级用法,还在等什么?马上进入 沙箱实验室 ,体验沙箱实验《使用ModelArts中开发工具学习Python(高级)》,深入感受正则表达式和魔法方法吧!

上一篇:大数据 下一篇:Data Studio主界面的组成

AI开发平台ModelArts 

ModelArts是面向开发者的一站式AI开发平台,为机器学习与深度学习提供海量数据预处理及半自动化标注、大规模分布式Training、自动化模型生成,及端-边-云模型按需部署能力,帮助用户快速创建和部署模型,管理全周期AI工作流。