gpt4 book ai didi

python - 无法开始新线程

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:03 24 4
gpt4 key购买 nike

我正在使用多个线程并行处理文件来处理目录中的所有文件。一切正常,除了线程似乎保持事件状态,因此进程的线程数上升,直到达到 1K 左右的线程,然后它抛出一个 thread.error can't start new thread错误。我知道这个错误是由操作系统级别的线程数限制引起的。我似乎无法弄清楚使线程保持事件状态的错误在哪里。任何想法?这是我的代码的最小版本。

class Worker(Thread):
def __init__(self, tasks):
Thread.__init__(self)
self.tasks = tasks
self.daemon = True
self.start()

def run(self):
while True:
func, args, kargs = self.tasks.get()
try:
func(*args, **kargs)
except Exception, e: print e
self.tasks.task_done()


class ThreadPool:
def __init__(self, num_threads):
self.tasks = Queue(num_threads)
for _ in range(num_threads): Worker(self.tasks)

def add_task(self, func, *args, **kargs):
self.tasks.put((func, args, kargs))

def wait_completion(self):
self.tasks.join()


def foo(filename)
pool = ThreadPool(32)
iterable_data = process_file(filename)

for data in iterable_data:
pool.add_task(some_function, data)
pool.wait_completion()

files = os.listdir(directory)
for file in files:
foo(file)

最佳答案

您正在为每个文件启动一个具有 32 个线程的新线程池。如果您有大量文件,那将是很多线程。由于一次只有 一个 线程可以在 CPython 中执行 Python 字节码(由于全局解释器锁),它不一定非常快。

将线程池的创建移到 foo() 函数之外。

关于python - 无法开始新线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16309435/

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