工作是在网格(16 x 16)上计数10。共享的dict
库正在监视。代码在这里:
import json
import multiprocessing as mp
import time
from itertools import product
def func(point, limit, pause, Library):
while True:
if Library[point] >= limit:
break
time.sleep(pause)
Library[point] += pause
pass
pass
def main():
limit = 10
pause = 1
points = list(product(range(16), range(16)))
Library = mp.Manager().dict()
Library.update({point: 0 for point in points })
pool = mp.Pool()
t0 = time.time()
for point in points:
pool.apply_async(func, args=[point, limit, pause, Library])
pass
pool.close()
pool.join()
duration = round(time.time()-t0, 2)
print(duration)
pass
if __name__ == '__main__':
main()
pass
我在具有多个节点的服务器上运行它。每个节点有多个(≥16)CPU,每个CPU有16个内核。我假设如果该脚本tasks.py
在16个CPU上运行,那么将为每个内核分配一个进程。因此,运行时间应该在10秒左右。 PBS文件是这样的:
#!/bin/sh
#PBS -N tasks
#PBS -l select=1:ncpus=16
#PBS -l partition=std
#PBS -l walltime=1:00:00
#PBS -o logs/output/tasks.o
#PBS -e logs/error/tasks.e
cd $PBS_O_WORKDIR
python tasks.py
但是我错了。运行时间为160.72秒。似乎只有一个CPU在工作。有没有一种方法可以在PBS中的多个CPU上运行多处理脚本?任何帮助表示赞赏。谢谢。