gpt4 book ai didi

python - 限制并行工作的线程数

转载 作者:太空宇宙 更新时间:2023-11-03 13:34:18 28 4
gpt4 key购买 nike

我正在制作一个函数,将文件从本地机器复制到远程创建线程以并行执行 sftp

def copyToServer():
//does copy file given host name and credentials

for i in hostsList:
hostname = i
username = defaultLogin
password = defaultPassword
thread = threading.Thread(target=copyToServer, args=(hostname, username, password, destPath, localPath))
threadsArray.append(thread)
thread.start()

这会创建线程并开始并行复制,但我想将其限制为一次处理 50 个线程,因为服务器总数可能太多

最佳答案

您需要调整代码以共享和跟踪共同值(value)。

这可以通过 Semaphore Object 来完成.该对象拥有一个内部计数器,每个线程都尝试获取它。如果计数器大于您定义的最大值,线程将无法获得一个,并且将被阻塞,直到有一个被释放。

一个简短的例子显示了最多 5 个并行线程,其中一半线程立即执行,其他线程被阻塞并等待:

import threading
import time

maxthreads = 5
sema = threading.Semaphore(value=maxthreads)
threads = list()

def task(i):
sema.acquire()
print "start %s" % (i,)
time.sleep(2)
sema.release()

for i in range(10):
thread = threading.Thread(target=task,args=(str(i)))
threads.append(thread)
thread.start()

输出

start 0
start 1
start 2
start 3
start 4

几秒钟后,第一个线程完成,下一个线程被执行

start 5
start 6
start 7
start 8
start 9

关于python - 限制并行工作的线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42173808/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com