starmap_async绕过打印功能

时间:2019-05-07 23:36:29

标签: python python-3.x asynchronous iterator multiprocessing

这是我正在运行的代码:

from itertools import product
from functools import partial

import numpy as np
import pandas as pd
import multiprocessing as mp

def func1(n0_tup, n1_tup, n3, df):
    df = df.copy()
    df = df.astype(object)

    X = pd.DataFrame({'col0': np.repeat(-n0_tup[1],n1_tup[0]),
                      'col1': n3*np.arange(n1_tup[0]),
                       'col2': n3*np.repeat(n1_tup[1],n1_tup[0]),
                       'col3': [f'random string {i}' for i in range(n1_tup[0])]})

    X['col4'] = func2(n1_tup[0], X.shape[0])
    temp = (n0_tup[1],n1_tup[0],n1_tup[1],n3)
    ind = (n0_tup[0],n1_tup[0],n1_tup[1])

    df[f'special col {temp}'] = n0_tup[1]+n1_tup[0]+n1_tup[1]+n3

    df2 = df
    df2[f'special col2 {temp}'] = n0_tup[1]+n1_tup[0]+n1_tup[1]+n3

    df3 =df2
    df3[f'special col3 {temp}'] = n0_tup[1]+n1_tup[0]+n1_tup[1]+n3

    print(temp)#<----This line gets skipped over by starmap_async

    return ind, temp, X['col2'].sum()+ df3[f'special col3 {temp}'].sum()

def main3():
    xd = pd.DataFrame({'col1': list('just a string')})
    A_lst = np.arange(1,10+1)
    A_size = A_lst[-1]+1
    B_rge = np.arange(660,670)
    B_size = len(B_rge)

    lst1 = (item for item in product(A_lst, repeat = 2) if item[0] < item[1])
    lst2 = enumerate(np.arange(660,670))
    arg_list = product(lst2, lst1)

    with mp.Pool(processes = mp.cpu_count()) as pool:
        result = pool.starmap_async(partial(func1, n3 = 100, df = xd), arg_list).get()

    result_fin = np.zeros([B_size, A_size - 1, A_size])
    for item in result:
        ind = item[0]
        result_fin[ind[0], ind[1], ind[2]] =item[2]

    return result, result_fin

if __name__ == '__main__':
    result_main3 = main3()

我刚刚开始学习多处理,并创建了一个要进行多处理的功能作为学习资料。当我研究异步内容时,偶然发现了这个问题。打印功能被跳过!我只是在使用print函数来确保事物异步运行,但是跳过了print函数,这似乎是不可能的。我的问题如下:

1)为什么跳过打印功能,如何启用它?

2)除了打印功能以外,是否有一种简单的方法来监视代码是否正在异步运行?

3)假设不允许更改func1,是否可以进一步加快代码的速度?如果是这样,怎么办?

谢谢大家

编辑:删除了一些未使用的导入

0 个答案:

没有答案