有关python中多处理原理的问题

时间:2019-06-21 19:41:53

标签: python multiprocessing

我对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()

1 个答案:

答案 0 :(得分:0)

Python本身的任务调度是FIFO,因此,一旦提交了所有任务,就由内核决定池中各进程之间的调度。多处理将进程调度任务留给了OS内核。

所以它要复杂得多。可以根据操作系统的决定以多种方式安排进程。 通常,OS内核在调度进程以最大化CPU使用率方面很聪明。因此,如果您有24个核心和24个进程的池,则可以期望CPU得到最佳利用-但是,这当然取决于您的任务实际执行的工作。

因此,一旦您将所有任务提交给池:

  • 前24个任务将由24个进程承担
  • 这些任务一直运行到完成为止(这取决于内核如何调度进程)
  • 完成任务的流程后,将向其提交新任务。这将一直发生,直到提交的任务全部完成为止。

找出CPU使用效率的最佳方法是监视CPU本身。