我对python中的多处理原理有一个快速的疑问。例如,如果有35个任务和24个流程,那么多处理如何工作?哪个是对的?
A。 35个任务中有35个由24个内核运行。
B。首先,35个任务中的24个由24个内核运行。 完成24个工作后,其余11个核心将执行35个任务(11个)。
如果B正确,我如何在多处理中始终使用24个内核?
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=24)
test_list = [sub_1, sub_2, sub_3, sub_4, ..., sub_35]
results = pool.map(labeling, test_list)
pool.close()
pool.join()
答案 0 :(得分:0)
Python本身的任务调度是FIFO,因此,一旦提交了所有任务,就由内核决定池中各进程之间的调度。多处理将进程调度任务留给了OS内核。
所以它要复杂得多。可以根据操作系统的决定以多种方式安排进程。 通常,OS内核在调度进程以最大化CPU使用率方面很聪明。因此,如果您有24个核心和24个进程的池,则可以期望CPU得到最佳利用-但是,这当然取决于您的任务实际执行的工作。
因此,一旦您将所有任务提交给池:
找出CPU使用效率的最佳方法是监视CPU本身。