threading怎么分批开启线程,比如我要开100个,他会每次运行10个,等这10个运行结束再开启下10个。现在我开始100个他会一次性全开启,处理起来很慢,半天没反应
你可以每次开启10个然后记录一下线程的id,每过一段时间检查一下这个10个id是否还存活
"""
将你要执行的任务放入多列中 比如说有1000个接口, 你可以创建10个线程(worker)去执行,直到所有接口处理完毕
下面代码是模拟 0-39数字延时打印
可以对比
for i in range(0, 20):
time.sleep(1)
print("url:{}, 结果是:{}".format(i, i * 2))
"""
from threading import Thread
import time
try:
import queue
except ImportError:
import Queue as queue
url_queue = queue.Queue()
def crawl_worker(q):
while True:
url = q.get()
if url is None:
break
# 这里是需要执行的操作 模拟等待操作 然后让每个数字乘以2
time.sleep(1)
print("url:{}, 结果是:{}".format(url, url*2))
# 将所有接口或者列表数据加入队列中 这里以生成0-39为例
for url in range(0,40):
url_queue.put(url)
num_workers = 10
workers = [
Thread(target=crawl_worker, args=(url_queue,))
for _ in range(num_workers)
]
print("-------------", url_queue.qsize())
# 为每个worker添加一个 None 信号 直到所有工作完成
for worker in workers:
url_queue.put(None)
print("-------------", url_queue.qsize())
# 启动所有
for worker in workers:
worker.start()
# 等待完成
for worker in workers:
worker.join()