gpt4 book ai didi

python - 以小组形式执行 Python 线程

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

我正在尝试使用 python 将一些(100)个数据集插入到 SQL Server 中。我正在使用多线程在循环中创建 100 个线程。所有这些都同时启动,这导致数据库陷入困境。我想将我的线程分为 5 个一组,一旦该组完成,我想启动下一组线程,依此类推。由于我是 python 和多线程的新手,任何帮助将不胜感激。请在下面找到我的代码。

for row in datasets:
argument1=row[0]
argument2=row[1]
jobs=[]
t = Thread(target=insertDataIntoSQLServer, args=(argument1,argument2,))
jobs.append(t)
t.start()
for t in jobs:
t.join()

最佳答案

在 Python 2 和 3 上,您可以使用 multiprocessing.ThreadPool。这类似于 multiprocessing.Pool,但使用线程而不是进程。

import multiprocessing

datasets = [(1,2,3), (4,5,6)] # Iterable of datasets.

def insertfn(data):
pass # shove data to SQL server

pool = multiprocessing.ThreadPool()

p.map(insertfn, datasets)

默认情况下,将创建与 CPU 核心数一样多的工作线程。使用更多线程可能不会有帮助,因为它们会争夺 CPU 时间。

请注意,我已将数据分组为元组。这是解决池工作人员的单一参数限制的一种方法。

在 Python 3 上,您还可以使用ThreadPoolExecutor

但请注意,在具有全局解释器锁的 Python 实现(如“标准”CPython)上,一次只有一个线程可以执行 Python 字节码。因此使用大量线程并不会自动提高性能。线程可能有助于 I/O 绑定(bind)的操作。如果一个线程正在等待 I/O,则另一个线程可以运行。

关于python - 以小组形式执行 Python 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43162282/

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