理论上讲,Python是不存在线程安全问题的,由于GIT么,但是这是有前提的:sleep,I/O导致的wait都可能会引发线程安全隐患。
同理,gevent是基于事件驱动模型的,就不太可能是线程安全的。
gevent.coros.Semaphore提供了信号量的功能,可以是n个哦!
semaphore.acquire() -> 获取“锁”
semaphore.release() -> 释放“锁”
gevent的文档写的真简介啊,于是测试了个基本的同步方法:同[......]
理论上讲,Python是不存在线程安全问题的,由于GIT么,但是这是有前提的:sleep,I/O导致的wait都可能会引发线程安全隐患。
同理,gevent是基于事件驱动模型的,就不太可能是线程安全的。
gevent.coros.Semaphore提供了信号量的功能,可以是n个哦!
semaphore.acquire() -> 获取“锁”
semaphore.release() -> 释放“锁”
gevent的文档写的真简介啊,于是测试了个基本的同步方法:同[......]
#arr是被分割的list,n是每个chunk中含n元素。
def chunks(arr, n):
return [arr[i:i+n] for i in range(0, len(arr), n)]
#或者让一共有m块,自动分(尽可能平均)
#split the arr into N chunks
def chunks(arr, m):
n = int(math.ceil(len(arr) / float(m)))
return [arr[i:i +[......]
1、Map/Reduce任务
输入:
文件格式
id value
其中id是1~100之间的随机整数,value为1~100之间的随机浮点数。
输出:
每个id的最大value
生成这类文件,可以用python搞定,见本文末尾的附录。
2、Map/Reduce程序
这里就直接使用新(0.20.2)的API了,即org.apache.hadoop.mapreduce.*下的接口。
特别注意:
job.setNumReduceTasks(5)
指定了本Job的Redu[......]
Python中的Dictionary类似于C++ STL中的Map
Sort by value
#remember to import
from operator import itemgetter
dict={.....}
#sort by value
sorted(dict.items(), key=itemgetter(1), reverse=True)
Sory by Key
#sort by key
sorted(d.items())[......]
数据格式:
<PAIR>
<TEXT>AAA</TEXT>
<LINK>BBB</LINK>
</PAIR>
......
<PAIR>
<TEXT>XXX</TEXT>
<LINK>YYY</LINK>
</PAIR>
代码:特别注意re.DOCALL
def getAnchors(self):
te[......]