如何通过线程限制核心数量

alp*_*ric 3 python multithreading

下面发布的代码启动了一个线程,该线程在我的macbookpro上启动了4个内核。有没有一种方法可以限制线程应使用多少个内核?

    import threading

    import logging
    logging.basicConfig(level=logging.DEBUG, format='(%(threadName)s) %(message)s',)

    def func():
        logging.debug('starting')
        m=0
        for i in range(500000000):
            m+=i
        logging.debug('exiting') 

    thread = threading.Thread(target=func)
    thread.start()

    logging.debug('completed')
Run Code Online (Sandbox Code Playgroud)

这是日志:

Loaded sitecustomize.py
(Thread-1) starting
(MainThread) completed
(Thread-1) exiting
[Finished in 128.0s]
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Mic*_* D. 5

有多线程和多处理。

您可以将进程绑定到cpu-core,但是不能将线程绑定到core。

进程和线程之间的主要区别是创建时间,线程产生速度更快,它们在相同的内存空间中运行,而进程具有单独的内存。

import multiprocessing as mp
import psutil


def spawn():
    procs = list()
    n_cpus = psutil.cpu_count()
    for cpu in xrange(n_cpus):
        affinity = [cpu]
        d['affinity'] = affinity
        p = mp.Process(target=run_child, kwargs=d)
        p.start()
        procs.append(p)
    for p in procs:
        p.join()
        print('joined')

def run_child(affinity):
    proc = psutil.Process()  # get self pid
    print('PID: {pid}'.format(pid=proc.pid))
    aff = proc.cpu_affinity()
    print('Affinity before: {aff}'.format(aff=aff))
    proc.cpu_affinity(affinity)
    aff = proc.cpu_affinity()
    print('Affinity after: {aff}'.format(aff=aff))


if __init__ == '__main__':
    spawn()
Run Code Online (Sandbox Code Playgroud)