Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python starmap_async绕过打印功能_Python_Python 3.x_Asynchronous_Iterator_Multiprocessing - Fatal编程技术网

Python starmap_async绕过打印功能

Python starmap_async绕过打印功能,python,python-3.x,asynchronous,iterator,multiprocessing,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({'co

下面是我正在运行的代码:

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()
来自itertools导入产品的

从functools导入部分
将numpy作为np导入
作为pd进口熊猫
将多处理作为mp导入
def func1(n0、n1、n3、df):
df=df.copy()
df=df.astype(对象)
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}'表示范围内的i(n1_tup[0])})
X['col4']=func2(n1_tup[0],X.shape[0])
温度=(n0\u-tup[1],n1\u-tup[0],n1\u-tup[1],n3)
ind=(n0\u-tup[0],n1\u-tup[0],n1\u-tup[1])
df[f'特殊列{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)#这对我来说很有效(Python 3.7.3、numpy 1.16.3、Pandas 0.24.2、Linux 5.0.13),通过工作,我的意思是我从
print
获得输出。顺便说一句,
func2
没有定义,所以我只是将该列设置为42…请注意,您的
df2=df
可能没有达到预期效果,它可能值得一看:。此外,通过
池传递的每个值都是隐式复制的(所有内容都通过
pickle
和back序列化),因此可能无需显式执行此操作,
池也默认使用
cpu\u count
作为进程数。和
pool.starmap\u async(…).get()
pool.starmap(…)
相同,谢谢您的输入。之所以忽略打印,可能是因为我使用的是Python 3.6.8,而不是3.7.3。但我确实有一个问题;为什么pool.startmap_asyc(…)与pool.starmap(…)相同?我的意思是一个是异步的,另一个是同步的。异步多处理不应该比同步多处理运行得稍快一点吗?同样,感谢您指出df2=df。应该使用df2=df.copy()作为一种很好的实践,通过池运行的所有内容都是在一组并行/异步进程中执行的。这正是您想要/需要返回结果的时候。如果说您希望在将来某个时候得到结果(
starmap\u async
),然后立即等待结果(
.get()
),这与说您立即需要结果是一样的(
starmap
)。他们说他们是相同的,所以你只是不必要地使你的代码复杂化了这对我来说是可行的(Python 3.7.3,numpy 1.16.3,Pandas 0.24.2,Linux 5.0.13),我的意思是我从
打印
中获得输出。顺便说一句,
func2
没有定义,所以我只是将该列设置为42…请注意,您的
df2=df
可能没有达到预期效果,它可能值得一看:。此外,通过
池传递的每个值都是隐式复制的(所有内容都通过
pickle
和back序列化),因此可能无需显式执行此操作,
池也默认使用
cpu\u count
作为进程数。和
pool.starmap\u async(…).get()
pool.starmap(…)
相同,谢谢您的输入。之所以忽略打印,可能是因为我使用的是Python 3.6.8,而不是3.7.3。但我确实有一个问题;为什么pool.startmap_asyc(…)与pool.starmap(…)相同?我的意思是一个是异步的,另一个是同步的。异步多处理不应该比同步多处理运行得稍快一点吗?同样,感谢您指出df2=df。应该使用df2=df.copy()作为一种很好的实践,通过池运行的所有内容都是在一组并行/异步进程中执行的。这正是您想要/需要返回结果的时候。如果说您希望在将来某个时候得到结果(
starmap\u async
),然后立即等待结果(
.get()
),这与说您立即需要结果是一样的(
starmap
)。代码表示它们是相同的,所以您只是不必要地使代码复杂化了