gpt4 book ai didi

python - 如何限制线程数

转载 作者:行者123 更新时间:2023-11-28 22:37:03 26 4
gpt4 key购买 nike

THINGS 变量中存储了 101 个东西。该代码声明了 101 个线程并立即同时执行它们。

我想知道我们是否可以将事件线程的数量限制为 12 个。

起初只有 12 个线程应该选择他们的 12 个事物来处理。其余线程应该等待前 12 个线程完成它们的工作。当前 12 个线程全部完成后,接下来的 12 个线程将选择接下来的 12 个要处理的东西。所以一个。

这可能吗?

import Queue
import threading, time

class MyThread(threading.Thread):
def __init__(self, theQueue=None):
threading.Thread.__init__(self)
self.theQueue=theQueue

def run(self):
thing=self.theQueue.get()
self.process(thing)
self.theQueue.task_done()

def process(self, thing):
time.sleep(1)
print 'processing %s'%thing.name

queue=Queue.Queue()
THINGS = ['Thing%02d'%i for i in range(101)]

THREADS=[]
for thing in THINGS:
thread=MyThread(theQueue=queue)
thread.name = thing
THREADS.append(thread)
thread.start()

for thread in THREADS:
queue.put(thread)

最佳答案

下面发布了工作解决方案。基本思想是我们只声明与可用 CPU 一样多的 Threads 实例。然后我们继续将“任务”(或此处的“事物”)添加到队列中。一旦任务被添加到队列中,它就会立即被我们在上一步中声明的线程实例之一拾取。

重要提示:为了使该机制起作用,MyThread.run() 方法应该在 while 循环内运行。否则 MyThread 实例将在完成第一个任务后立即终止。 while 循环将在队列中没有任务剩余时自行退出。故事到此结束。

import Queue
import threading, time

class MyThread(threading.Thread):
def __init__(self, theQueue=None):
threading.Thread.__init__(self)
self.theQueue=theQueue

def run(self):
while True:
thing=self.theQueue.get()
self.process(thing)
self.theQueue.task_done()

def process(self, thing):
time.sleep(1)
print 'processing %s'%thing

queue=Queue.Queue()
THINGS = ['Thing%02d'%i for i in range(101)]
AVAILABLE_CPUS=3

for OneOf in range(AVAILABLE_CPUS):
thread=MyThread(theQueue=queue)
thread.start() # thread started. But since there are no tasks in Queue yet it is just waiting.

for thing in THINGS:
queue.put(thing) # as soon as task in added here one of available Threads picks it up

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

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