请问这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是多少核以及调度过程的。
00
相似问题