首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python多线程每次处理10个线程,直到200个线程完成

python多线程每次处理10个线程,直到200个线程完成
EN

Stack Overflow用户
提问于 2022-05-26 17:16:38
回答 1查看 125关注 0票数 -2

我在所有服务器中都有200个SQL服务器和40个相同的表。我想在所有200个线程中每个表执行python数据管道。只想知道我是否可以一次并发地运行10个线程,如果它们完成了,它将运行下一个10个线程,直到200个线程在一个作业中自动完成。

代码语言:javascript
复制
for index, row in shops.iterrows():
    tf =isOpen(row['shop_ip'] , row['port'])
    endTime = time.time()
    pingTime = endTime-startTime
    if tf:
        print(f"UP {row['shop_ip']} Ping Successful Time Taken : "+str(pingTime)+" seconds")
        x = threading.Thread(target=ETLScript.ETLLoadingShopPos,args=(SelectColumns,tableName,tableName,row['shop_code'],'where 1=1',str(row['shop_code']),row))
        jobs.append(x)
        x.start()
        x.join()
EN

回答 1

Stack Overflow用户

发布于 2022-05-27 04:18:13

根据您的解释,是将10个线程作为一个运行组运行,还是只允许10个线程运行?

我认为排队的概念是可行的

代码语言:javascript
复制
import time
import threading

jobs = []

for index, row in shops.iterrows():
    tf =isOpen(row['shop_ip'] , row['port'])
    endTime = time.time()
    pingTime = endTime-startTime
    if tf:
        while sum([j.is_alive() for j in jobs]) >= 10:
            time.sleep(0.3) # give it a range to check to avoid resource consumed the whole time by main thread                            
        print(f"UP {row['shop_ip']} Ping Successful Time Taken : "+str(pingTime)+" seconds")
        x = threading.Thread(target=ETLScript.ETLLoadingShopPos,args=(SelectColumns,tableName,tableName,row['shop_code'],'where 1=1',str(row['shop_code']),row))
        jobs.append(x)
        x.start()

这允许您一次运行10个线程。while循环将用作阻止程序,以检查这些线程是否已经完成,将启动另一个新线程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72395678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档