Итак, вот код, который я запускаю:
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()
Я только начал изучать многопроцессорность и создал функцию для многопроцессорности в качестве учебного материала.Пока я разбирался с асинхронными вещами и наткнулся на эту проблему.Функция печати пропускается!Я просто использую функцию печати, чтобы убедиться, что все работает асинхронно, но с пропуском функции печати это кажется невозможным.У меня следующие вопросы:
1) Почему пропускается функция печати и как я могу ее включить?
2) Существует ли простой способ отслеживать, выполняются ли коды асинхроннокроме функции печати?
3) Предположим, что изменение func1 не разрешено, возможно ли еще больше ускорить код?Если так, то как?
Заранее спасибо, ребята
РЕДАКТИРОВАТЬ: удалены некоторые неиспользованные импорт