欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python 链式语法,并行执行

程序员文章站 2022-03-15 15:08:01
python 与 ruby 写起来最不一样的地方就是链式调用了, ruby 几乎可以连续写下去。而python 就很麻烦了,动不动就要用全局定义的函数,有害还要突然在上面定义个函数之类的,更甚至 lambda 里面不能显示使用’='赋值。今天发现个 seq 方法,勉强能解决部分问题,记录一下seq 文档查询 里面实现了很多方法,写起来能像ruby 了。from functional import seqwets=np.zeros(len(lines), np.float32)vids_w = se...

链式语法

python 与 ruby 写起来最不一样的地方就是链式调用了, ruby 几乎可以连续写下去。而python 就很麻烦了,动不动就要用全局定义的函数,有害还要突然在上面定义个函数之类的,更甚至 lambda 里面不能显示使用’='赋值。

今天发现个 seq 方法,勉强能解决部分问题,记录一下
seq 文档查询 里面实现了很多方法,写起来能像ruby 了。

from functional import seq
wets=np.zeros(len(lines), np.float32)
vids_w = seq(lines).map(lambda x: x.split()).map(
            lambda x: (int(x[0]), float(x[1]) ) ).for_each(
                    lambda x: wets.itemset(x[0], x[1]) )

可以看到都必须要使用 numpy.ndarrad.itemset 这种方式。 如果是 dict 可以使用 setdefault,或者 update,其他的话就得自己查文档或者想办法了。

并行

参考

下面展示了,传多个参数的方法

import multiprocessing

def f1_det_lm( lines, bg, idnm ):
    cls_face = get_cls_face(dtp)
    #for line in tqdm(lines): _f1_det_lm(line, cls_face)
    cores = multiprocessing.cpu_count()
    print("cores", cores)
    # start a pool
    pool = multiprocessing.Pool(processes=cores//2)
    tasks = [ (lines[i], cls_face, i) for i in range(len(lines)) ]
    pool.map(_f1_det_lm_mul, tasks)

def _f1_det_lm_mul(args):
    _f1_det_lm(args[0], args[1])
    print( "finished", args[2]  )

def _f1_det_lm(line, cls_face): pass

本文地址:https://blog.csdn.net/ChangHongJian/article/details/109639833