Python 代码从不输入';将池(进程=4)作为池:块

Python 代码从不输入';将池(进程=4)作为池:块,python,multiprocessing,python-multiprocessing,starmap,apply-async,Python,Multiprocessing,Python Multiprocessing,Starmap,Apply Async,python中的多处理新手,只是想理解为什么我的代码不会进入“with Pool(processs=4)as Pool:block”。下面是一个简单的代码(我删除了一些细节,因为它们不是必需的) 通常在所有情况下,我都希望它进入行打印(“池已设置”)。但有时它甚至不去那里,停在打印(“设置池”)。有人能解释一下在什么情况下会发生这种情况吗?没有定义每个节点的CPU。此代码应生成一个名称错误。很抱歉造成混淆。我编辑了我的答案。我使用了一个常数进行测试。是的,它不进入该块,而且未定义每个更新的运行。

python中的多处理新手,只是想理解为什么我的代码不会进入“with Pool(processs=4)as Pool:block”。下面是一个简单的代码(我删除了一些细节,因为它们不是必需的)


通常在所有情况下,我都希望它进入行打印(“池已设置”)。但有时它甚至不去那里,停在打印(“设置池”)。有人能解释一下在什么情况下会发生这种情况吗?

没有定义每个节点的CPU。此代码应生成一个
名称错误
。很抱歉造成混淆。我编辑了我的答案。我使用了一个常数进行测试。是的,它不进入该块,而且未定义每个更新的
运行。我将
test\u func
更改为
run\u-on\u-each\u-pdate
,主体中只有
pass
。我无法重现你描述的行为。请提供复制行为的说明。问题:当代码似乎没有执行
with
块中的代码时,它是否会自行终止?它不会终止。我在集群上运行它,所以它只是超时
import os
import psutil
import time
import datetime
import sys
import multiprocessing
from multiprocessing.pool import Pool
import random as rnd
import math as math
from itertools import repeat

def test_func(arg1, arg2, arg3, arg4):
    do something()

if __name__ == '__main__':
    arg1 = sys.argv[1]
    arg2 = int(sys.argv[2])
    arg3 = int(sys.argv[3])
    arg4 = int(sys.argv[4])
    
    result_list = []
    print("Setting up pool")

    with Pool(processes=8) as pool:
        print("Pool is set up")
        pool.starmap_async(test_func, zip(arg1, repeat(arg2), repeat(arg3), repeat(arg4)), chunksize=3)
        pool.close()
        pool.join()
        print("The end in pool")
    print("The end in __main__")