在具有相同输入值的池中运行的2个方法显示没有多处理

2024-10-02 12:25:50 发布

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

我试图通过一个简单而简单的例子来理解两个方法是如何并行执行的。问题在于执行结果。我观察到执行是按顺序进行的,方法threeCheck()在调用sevenCheck()之前被完整地执行。 但我的理解是,这两种方法将并行执行。你知道吗

  • threeCheck()是一种检查数字是否可被3整除的方法
  • sevenCheck()是一种检查数字是否可被7整除的方法
  • 我在方法调用中添加了一个随机睡眠时间来模拟 延迟。你知道吗

我看到传入threeCheck()方法的输入正在并行处理。如果我们遵循序列,数组中可被3整除的数字是: 84, 66, 60, 66, 87, 99, 42, ....... 但是,当我们观察执行结果时,对于这些第一个结果,序列显示的是相反的

import multiprocessing as mp
import time
import random

def threeCheck(inputParam):
    if inputParam % 3 == 0:
        duration = random.randint(0,6)
        print("3 INPUT = {0} and Sleep = {1}".format(inputParam, duration))
        time.sleep(duration)
        return inputParam

def sevenCheck(inputParam):
    if inputParam % 7 == 0:
        duration = random.randint(0,6)
        print("7 INPUT = {0} and Sleep = {1}".format(inputParam, duration))
        time.sleep(duration)
        return inputParam

def main():
    cpuCount = mp.cpu_count()
    pool = mp.Pool(cpuCount)
    inputValues = []
    for i in range(50):
        inputValues.append(random.randint(0,100))

    resultThree = pool.map(threeCheck, inputValues)
    resultSeven = pool.map(sevenCheck, inputValues)

    print("INPUT = ", inputValues)
    print("CPU = ", cpuCount)
    print("RESULT 3 = ", resultThree)
    print("RESULT 7 = ", resultSeven)

if __name__ == "__main__":
    main()
OUTPUT:
3 INPUT = 84 and Sleep = 5
3 INPUT = 66 and Sleep = 2
3 INPUT = 60 and Sleep = 1
3 INPUT = 99 and Sleep = 3
3 INPUT = 66 and Sleep = 3
3 INPUT = 42 and Sleep = 5
3 INPUT = 12 and Sleep = 1
3 INPUT = 87 and Sleep = 6
3 INPUT = 57 and Sleep = 5
3 INPUT = 42 and Sleep = 3
3 INPUT = 30 and Sleep = 2
3 INPUT = 63 and Sleep = 0
3 INPUT = 42 and Sleep = 6
3 INPUT = 24 and Sleep = 2
3 INPUT = 21 and Sleep = 6
3 INPUT = 30 and Sleep = 4
3 INPUT = 27 and Sleep = 0
7 INPUT = 7 and Sleep = 1
7 INPUT = 84 and Sleep = 6
7 INPUT = 42 and Sleep = 6
7 INPUT = 28 and Sleep = 1
7 INPUT = 21 and Sleep = 6
7 INPUT = 42 and Sleep = 5
7 INPUT = 63 and Sleep = 3
7 INPUT = 91 and Sleep = 5
7 INPUT = 42 and Sleep = 6
INPUT =  [7, 95, 25, 19, 59, 82, 47, 68, 20, 76, 84, 8, 88, 29, 1, 66, 60, 66, 87, 25, 23, 80, 52, 99, 65, 65, 25, 42, 12, 38, 28, 88, 57, 21, 27, 40, 42, 38, 31, 91, 30, 68, 22, 24, 63, 42, 64, 17, 65, 30]
CPU =  4
RESULT 3 =  [None, None, None, None, None, None, None, None, None, None, 84, None, None, None, None, 66, 60, 66, 87, None, None, None, None, 99, None, None, None, 42, 12, None, None, None, 57, 21, 27, None, 42, None, None, None, 30, None, None, 24, 63, 42, None, None, None, 30]
...

我肯定我错过了一些东西。。你知道吗


Tags: and方法importnoneinput数字sleeprandom

热门问题