gpt4 book ai didi

python - 执行线程 5 by 5

转载 作者:行者123 更新时间:2023-11-28 22:55:06 25 4
gpt4 key购买 nike

我有一大堆信息,我的程序应该分析每一个信息。为了加快速度,我想使用线程,但我想将它们限制在 5 个以内。所以我需要用 5 个线程创建一个循环,当一个线程完成他们的工作时,抓取一个新线程直到列表末尾。但我不知道该怎么做。我应该使用队列吗?现在我只是以最简单的方式运行 5 个线程:谢谢!

for thread_number in range (5):
thread = Th(thread_number)
thread.start()

最佳答案

将工作线程和任务的想法分开——不要让一个工作线程处理一个任务,然后终止线程。相反,生成 5 个线程,并让它们都从一个公共(public)队列中获取任务。让他们每个人都迭代,直到他们从队列中收到一个哨兵,告诉他们退出。

这比在线程只完成一项任务后不断产生和终止线程更有效。

import logging
import Queue
import threading
logger = logging.getLogger(__name__)
N = 100
sentinel = object()

def worker(jobs):
name = threading.current_thread().name
for task in iter(jobs.get, sentinel):
logger.info(task)
logger.info('Done')


def main():
logging.basicConfig(level=logging.DEBUG,
format='[%(asctime)s %(threadName)s] %(message)s',
datefmt='%H:%M:%S')

jobs = Queue.Queue()
# put tasks in the jobs Queue
for task in range(N):
jobs.put(task)

threads = [threading.Thread(target=worker, args=(jobs,))
for thread_number in range (5)]
for t in threads:
t.start()
jobs.put(sentinel) # Send a sentinel to terminate worker
for t in threads:
t.join()

if __name__ == '__main__':
main()

关于python - 执行线程 5 by 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17345565/

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