关于线程池:使用线程池时限制每个线程间隔启动的一种思路

53次阅读

共计 496 个字符,预计需要花费 2 分钟才能阅读完成。

需要形容

最近跑仿真时,为了高效利用服务器的计算资源,启动多个仿真程序以达到并行。
我将须要运行的命令一次性加载到 Python 的线程池中,并限度同时可执行的程序在服务器可承受的范畴内。
然而遇到了一个新的问题,在每次启动时,线程池容许的 20 个并行程序同时启动,导致程序启动时遇到读写文件的抵触。为了防止这种抵触,须要并行的程序顺次启动,而不是同时启动。例如,每个程序的启动工夫距离 20 秒。

一种解决思路

我想到的方法是利用线程锁。
在启动线程后,每个线程中首先调用一个函数,这个函数的实现是抢一个线程锁,而后睡眠 20 秒,之后再解锁。这样,其余线程尽管也被启动了,然而因为只有一个线程可能抢到线程锁,所以抢到锁的线程在睡眠 20 秒后就能够启动程序进行仿真,后续的所有线程仍然须要抢锁而后再启动。这样就防止了同时有多个线程启动仿真导致读写抵触了。

改良思路

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

正文完
 0