Python 多进程的池常量
Python multiprocessing's Pool constants
我是 python 中多处理模块的初学者,我只想对我的 def func[=22= 使用并发执行].此外,我在我的代码中使用了一些常量,但我对它们有疑问。
代码是 (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 次我需要输入我的路径。即此代码执行 1 + 4(对于每个进程)次。
我想像常量一样使用 FIRST_COUNT、PATH 和 some_list,并且只对 func 使用多进程。我怎样才能做到这一点。请帮帮我。
你应该把代码放在里面 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_COUNT
、PATH
,那么最好将其作为参数发送给 func
。
您必须在 chunks
中使用 FIRST_COUNT
、PATH
创建元组
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):
我是 python 中多处理模块的初学者,我只想对我的 def func[=22= 使用并发执行].此外,我在我的代码中使用了一些常量,但我对它们有疑问。 代码是 (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 次我需要输入我的路径。即此代码执行 1 + 4(对于每个进程)次。
我想像常量一样使用 FIRST_COUNT、PATH 和 some_list,并且只对 func 使用多进程。我怎样才能做到这一点。请帮帮我。
你应该把代码放在里面 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_COUNT
、PATH
,那么最好将其作为参数发送给 func
。
您必须在 chunks
FIRST_COUNT
、PATH
创建元组
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):