美文网首页
DECO——被修饰的并发

DECO——被修饰的并发

作者: roger_lyb | 来源:发表于2016-05-27 01:02 被阅读0次

    使用DECO就像在Python编程中查找或者创建两个函数一样简便。第一个函数是我们想要并行运行的函数,该函数使用@concurrent修饰。第二个函数调用使用@concurrent修饰的函数,并且使用@synchronized修饰自己。修饰第二个函数是可选的,但是却提供了非常酷的益处。让我们看个例子:

    @concurrent # We add this for the concurrent function

    def process_lat_lon(lat, lon, data):

        #Does some work which takes a while

        return result

    @synchronized # And we add this for the function which calls the concurrent function

    def process_data_set(data):

        results = defaultdict(dict)

        for lat in range(...):

            for lon in range(...):

                results[lat][lon] = process_lat_lon(lat, lon, data)

        return results

    这就是要做的事情,我们只需要改动两行代码就能使程序并行化。此刻,程序将充分利用所在机器上所有CPU核,这使得程序飞速运行。

    局限

    @concurrent修饰器仅仅是加速运行时间多于约1ms的那些函数

    如果函数运行时间少于1ms,你的代码反而会运行的更慢

    @synchronized修饰器仅仅能在“简单”函数上起作用,确信你的函数满足下面的标准:

    仅是调用或者赋值@concurrent函数的结果到索引的对象,就像下面的形式:

    concurrent(...)

    result[key] = concurrent(…)

    不要间接的读取被@concurrent函数调用而赋值的对象

    相关文章

      网友评论

          本文标题:DECO——被修饰的并发

          本文链接:https://www.haomeiwen.com/subject/upixdttx.html