这是我正在运行的代码:
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,是否可以进一步加快代码的速度?如果是这样,怎么办?
谢谢大家
编辑:删除了一些未使用的导入