需求描述

最近跑仿真时,为了高效利用服务器的计算资源,启动多个仿真程序以达到并行。
我将需要运行的命令一次性加载到Python的线程池中,并限制同时可执行的程序在服务器可接受的范围内。
但是遇到了一个新的问题,在每次启动时,线程池允许的20个并行程序同时启动,导致程序启动时遇到读写文件的冲突。为了避免这种冲突,需要并行的程序依次启动,而不是同时启动。例如,每个程序的启动时间间隔20秒。

一种解决思路

我想到的办法是利用线程锁。
在启动线程后,每个线程中首先调用一个函数,这个函数的实现是抢一个线程锁,然后睡眠20秒,之后再解锁。这样,其他线程虽然也被启动了,但是因为只有一个线程能够抢到线程锁,所以抢到锁的线程在睡眠20秒后就可以启动程序进行仿真,后续的所有线程依然需要抢锁然后再启动。这样就避免了同时有多个线程启动仿真导致读写冲突了。

改进思路

我的思路比较简单,其中还存在一个小问题:第一个启动的线程也需要睡眠20秒。这个问题比较好解决,可以定义一个睡眠时长变量,最开始初始化这个睡眠时长0秒,然后每次睡眠后讲这个变量改写为20秒。这样第一个抢到锁的进程就可以睡眠0秒,后续抢到锁的进程会睡眠20秒。


暗夜精灵
1 声望0 粉丝