首页 > 解决方案 > 代码永远不会进入 'with Pool(processes=4) as pool: block

问题描述

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

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__")

通常在所有情况下,我都希望它进入 print("pool is setup") 行。但有时它甚至不去那里并在 print("Setting up pool") 处停止。谁能解释在什么情况下会发生这种情况?

标签: pythonmultiprocessingpython-multiprocessingstarmapapply-async

解决方案


推荐阅读