【七月Python入门】 第七课并发编程以及系统常用模块

来源:互联网 发布:淘宝抠图 编辑:程序博客网 时间:2024/05/18 02:44

1.GIL全称为全局解释器锁(global interpreter lock),GIL是实现python解析器时引入的一个概念。GIL也是一把全局排他锁,同一时刻只有一个线程在运行。


2.Multiprocessing库弥补thread库因为GIL而低效的缺陷,它是使用多进程而不是多线程,每个进程有自己独立的GIL,因此也不会出现线程之间的GIL争夺。


3.Queue是多进程安全的队列,可以使用它来实现多进程之间的数据传递。


4.Thread中,join()方法的作用是调用线程等待该线程完成后,才能继续用下运行。

public static void main(String[] args) throws InterruptedException    {        System.out.println("main start");        Thread t1 = new Thread(new Worker("thread-1"));        t1.start();        t1.join();        System.out.println("main end");    }
    在上面的例子中,main线程要等到t1线程运行结束后,才会输出“main end”。如果不加t1.join(),main线程和t1线程是并行的。而加上t1.join(),程序就变成是顺序执行了。

5.多进程与多线程的对比

from multiprocessing import Processimport threadingimport timelock = threading.Lock() def run(info_list,n):    lock.acquire()    info_list.append(n)    lock.release()    print('%s\n' % info_list)    if __name__=='__main__':    info = []    for i in range(10):        #target为子进程执行的函数,args为需要给函数传递的参数         p = Process(target=run,args=[info,i])        p.start()        p.join()    time.sleep(1) #这里是为了输出整齐让主进程的执行等一下子进程    print('------------threading--------------')    for i in range(10):        p = threading.Thread(target=run,args=[info,i])        p.start()        p.join()

6.函数式编程

(1)lambda:快速定义单行的最小函数,inline的匿名函数。

g = lambda x: x * 2print g(3)print (lambda x: x * 2)(4)


(2)map(function, sequence) :对sequence中的item依次执行function(item),执行结果组成一个List返回。
def toUpper(item):      return item.upper() upper_name = map(toUpper, ["qi", "yue", "July"])print upper_name


(3)filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回。
number_list = range(-5, 5)less_than_zero = list(filter(lambda x: x < 0, number_list))print(less_than_zero)


(4)reduce(function, sequence, starting_value):对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用。

def add(x,y): return x + yprint reduce(add, range(1, 5))print reduce(add, range(1, 5), 10)

一个example,计算数组中的平均数,综合利用以上函数。

# 正常写法:num =[2, -5, 9, 7, -2, 5, 3, 1, 0, -3, 8]positive_num_cnt = 0positive_num_sum = 0for i in range(len(num)):    if num[i] > 0:        positive_num_cnt += 1        positive_num_sum += num[i] if positive_num_cnt > 0:    average = positive_num_sum / positive_num_cnt print average# 输出 5

# 函数式写法:num =[2, -5, 9, 7, -2, 5, 3, 1, 0, -3, 8]positive_num = filter(lambda x: x>0, num)average = reduce(lambda x,y: x+y, positive_num) / len( positive_num )print average


7.mapreducer:

一个形象的例子:给在座的所有玩家中分配这摞牌;让每个玩家数自己手中的牌有几张是黑桃,然后把这个数目汇报给你你把所有玩家告诉你的数字加起来,得到最后的结论

MapReduce合并了两种经典函数:

(1)映射(Mapping)对集合里的每个目标应用同一个操作。即,如果你想把表单里每个单元格乘以二,那么把这个函数单独地应用在每个单元格上的操作就属于mapping。

(2)化简(Reducing )遍历集合中的元素来返回一个综合的结果。即,输出表单里一列数字的和这个任务属于reducing。




8.spark:spark是基于map reduce 算法实现的分布式计算框架。spark的中间输出和结果输出可以保存在内存中,从而不再需要读写HDFS。
spark实现wordcount:
import sysfrom operator import addfrom pyspark import SparkContextsc = SparkContext()In [19]:lines = sc.textFile("stormofswords.csv")counts = lines.flatMap(lambda x: x.split(',')) \              .map(lambda x: (x, 1)) \              .reduceByKey(add)output = counts.collect()output = filter(lambda x:not x[0].isnumeric(), sorted(output, key=lambda x:x[1], reverse = True))for (word, count) in output[:10]:    print "%s: %i" % (word, count)sc.stop()

9.正则表达式:对于做文本搜索,爬虫等非常有用。两种模式匹配:搜索search()和匹配match()。
import rem = re.match(r'dog', 'dog cat dog')print m.group()print re.match(r'cat', 'dog cat dog')s = re.search(r'cat', 'dog cat dog')print s.group()print re.findall(r'dog', 'dog cat dog')


判断一个字符串是否是合法的email地址
# email examplestr = 'purple alice-b@google.com monkey dishwasher'match = re.search(r'\w+@\w+', str)if match:    print match.group()  ## 'b@google',因为\w不能匹配到地址中的'-'和'.'b@googlematch = re.search(r'[\w.-]+@[\w.-]+', str)if match:    print match.group()  ## 'alice-b@google.com'





阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 编号是什么意思 序号是什么意思 社保10位个人编号在哪 2018学校代码编号查询网 2019学校代码编号查询 勾兑酒和酿造酒编号区别 阿玛尼手表后盖编号 三国群英传武将编号 编外人员 编外丈夫 编外工作人员 2019编外人员全部转正 编外人员能转正吗 编外人员是什么意思 编外鬼差 骑龟散人 2018编外人员工资标准 编安 安师大教师考编 编导 影视编导 舞蹈编导 编导高考 广播电视编导文艺编导 编导学什么 编导是什么 编导好考吗 中国编导网 什么叫编导 编导考试 播音编导 编导联考 编导系 文艺编导 编导专业大学排名 女生学编导就业前景 编导就业前景 编导文化分400能上什么大学 编导专业文化分数线 编导故事范文 广播电视编导专业 编导故事范文十篇