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)
有多线程和多处理。
您可以将进程绑定到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)
| 归档时间: |
|
| 查看次数: |
1684 次 |
| 最近记录: |