下面发布的代码启动一个线程,在我的 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')
这是日志:
Loaded sitecustomize.py
(Thread-1) starting
(MainThread) completed
(Thread-1) exiting
[Finished in 128.0s]
有多线程和多处理。
您可以将进程绑定到 cpu 核心,但不能将线程绑定到核心。
进程和线程之间的主要区别在于创建时间,线程产生速度更快并且它们在相同的内存空间中运行,而进程具有单独的内存。
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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)