请问这10个进程的并发或者并行状态?

来源:6-4 Python进程池标准库ProcessPoolExecutor

慕丝2042335

2021-12-11

请教老师们:
如果有4个内核,创建这10个进程,执行task,从并发和并行的角度去看,怎么能确认10个进程的执行状态是并发还是并行呢?

打印出task中的core id, 发现每个进程在执行task内部的2次打印时,在不同的core上。请问一个进程领取到一个task任务后,在执行task内部的各种指令时,并不是固定在同一个core上的?

# -*- encoing=utf-8 -*-
import os
import time
import multiprocessing
from concurrent.futures import ProcessPoolExecutor
import psutil


pp = ProcessPoolExecutor(5)


def _task():
    for i in range(2):
        print("I'm running on CPU #%s" % multiprocessing.current_process().name)
        b = psutil.Process().cpu_num()
        print('this is a _task. i = {}. process id = {}, cpu core id = {}'.format(i, os.getpid(), b))
        time.sleep(1)
    return time.time()

futures = []
for i in range(5):
    future = pp.submit(_task)
    futures.append(future)

for future in futures:
    print(future.result())

process id 1002, 在执行两次打印过程中,分别执行在core_2和 core_0上。

[root@38ea79f12a17 6]# python processexecutortest.py
I'm running on CPU #ForkProcess-1
this is a _task. i = 0. process id = 997, cpu core id = 2
I'm running on CPU #ForkProcess-2
this is a _task. i = 0. process id = 1000, cpu core id = 3
I'm running on CPU #ForkProcess-4
this is a _task. i = 0. process id = 1002, cpu core id = 2
I'm running on CPU #ForkProcess-3
this is a _task. i = 0. process id = 1001, cpu core id = 0
I'm running on CPU #ForkProcess-5
this is a _task. i = 0. process id = 1003, cpu core id = 3
I'm running on CPU #ForkProcess-1
this is a _task. i = 1. process id = 997, cpu core id = 2
I'm running on CPU #ForkProcess-2
I'm running on CPU #ForkProcess-4
this is a _task. i = 1. process id = 1000, cpu core id = 3
this is a _task. i = 1. process id = 1002, cpu core id = 0
I'm running on CPU #ForkProcess-3
this is a _task. i = 1. process id = 1001, cpu core id = 0
I'm running on CPU #ForkProcess-5
this is a _task. i = 1. process id = 1003, cpu core id = 3
1639227261.698254
1639227261.6998458
1639227261.6994872
1639227261.6995008
1639227261.7000384
写回答

1回答

咚咚呛

2021-12-12

既存在并发的状态也存在并行的状态,这取决于你的计算机CPU是多少核以及调度过程的。

0
0

学透协程/进程/线程 程序员必知必会技能

程序员都需要掌握的高性能开发技术

276 学习 · 55 问题

查看课程