Python多处理池常量

2024-05-29 02:13:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python中多处理模块的初学者,我只想对我的def func使用并发执行。此外,我在代码中使用了一些常量,我对它们有问题。 代码是(python 3.6.8):

from multiprocessing import Pool

FIRST_COUNT=10
print("Enter your path")
PATH=input()

some_list=[]
for i in range(10000):
    some_list.append(i)  


def func(some_list):
    .....


if __name__ == "__main__":
chunks = [some_list[i::4] for i in range(4)]
pool = Pool(processes=4)

pool.map(func,chunks)

当我试图启动这个程序,我看到消息输入你的路径5次和5次我需要输入我的路径。i、 e此代码执行1+4次(对于每个进程)

我想使用FIRST\u COUNT、PATH和一些类似常量的\u列表,并且只对func使用多处理。我该怎么做。拜托,帮帮我


Tags: path代码infordefcountrangesome
1条回答
网友
1楼 · 发布于 2024-05-29 02:13:21

您应该将代码放入if __name__ == "__main__":中,以便只执行一次

if __name__ == "__main__":
    FIRST_COUNT = 10
    PATH = input("Enter your path: ")

    some_list = list(range(10000))
    #some_list = []
    #for i in range(10000):
    #    some_list.append(i)  

    chunks = [some_list[i::4] for i in range(4)]
    pool = Pool(processes=4)

    results = pool.map(func, chunks)

    print(results)

如果您想使用FIRST_COUNTPATH,那么最好将它作为参数发送到func

您必须在chunks中用FIRST_COUNTPATH创建元组

chunks = [(FIRST_COUNT, PATH, some_list[i::4]) for i in range(4)]

函数必须将其作为元组并将其解包

def func(args):
    first_count, paht, some_list = args

工作示例

from multiprocessing import Pool

def func(args):
    first_count, path, some_list = args

    result = sum(some_list)

    print(first_count, path, result)

    return result 


if __name__ == "__main__":
    FIRST_COUNT = 10
    PATH = input("Enter your path: ")

    some_list = list(range(10000))
    #some_list = []
    #for i in range(10000):
    #    some_list.append(i)  

    chunks = [(FIRST_COUNT, PATH, some_list[i::4]) for i in range(4)]
    pool = Pool(processes=4)

    all_results = pool.map(func, chunks)

    print('all results:', all_results)

编辑:您也可以使用starmap()而不是map()

    all_results = pool.starmap(func, chunks)

然后您可以使用(无需解包参数)

def func(first_count, path, some_list):

相关问题 更多 >

    热门问题