我正在try 从数据库获取数据,以便输入到机器学习模型.但我的生产者只将数据逐行放入数据库中,消费者也只能逐一获取数据.我的机器学习模型需要处理2000行.

我希望生产者和消费者每次都要放入和获得大量的行,而不仅仅是一个接一个

以下是我的python代码

def read_data():
    
    torque_data_queryset = Torque.get_torque_data()
    return list(torque_data_queryset)


def producer(queue):
    print('Producer: Running')
    data = read_data()
    for item in data:
       
        time.sleep(1)
        
        queue.put(item)
        print(f'> Producer added {item}')
    
    queue.put(None)
    print('Producer: Done')

# consumer task
def consumer(queue):
    print('Consumer: Running')
    while True:
        
        item = queue.get()
        print(item)
        
        if item is None:
            break
        
        time.sleep(1)
        
        print(f'> Consumer got {item}')
    print('Consumer: Done')

def thread_function():
    
    queue = Queue()
    
    consumer_thread = Thread(target=consumer, args=(queue,))
    consumer_thread.start()
    
    producer_thread = Thread(target=producer, args=(queue,))
    producer_thread.start()
    
    producer_thread.join()
    consumer_thread.join()
    
def thread_result(request):
    
    thread_function()
    return render(request, 'async_processing_result.html', {'message': 'Threads completed successfully!'})

推荐答案

您可以将对象列表put()放到队列中.消费者将一次将整个列表get().

例如:

import threading
import queue


def consumer(q: queue.Queue):
    while (value := q.get()) is not None:
        print(*value, sep="\n")


def producer(q: queue.Queue):
    # create a list of dictionaries
    data = [{"int": i, "chr": chr(i + ord("a"))} for i in range(10)]
    q.put(data)
    q.put(None)


def main():
    q = queue.Queue()
    threads = []
    for func in producer, consumer:
        (t := threading.Thread(target=func, args=(q,))).start()
        threads.append(t)
    for t in threads:
        t.join()


if __name__ == "__main__":
    main()

Output:

{'int': 0, 'chr': 'a'}
{'int': 1, 'chr': 'b'}
{'int': 2, 'chr': 'c'}
{'int': 3, 'chr': 'd'}
{'int': 4, 'chr': 'e'}
{'int': 5, 'chr': 'f'}
{'int': 6, 'chr': 'g'}
{'int': 7, 'chr': 'h'}
{'int': 8, 'chr': 'i'}
{'int': 9, 'chr': 'j'}

Python相关问答推荐

根据不同列的值在收件箱中移动数据

如何在Windows上用Python提取名称中带有逗号的文件?

将两只Pandas rame乘以指数

在线条上绘制表面

如何请求使用Python将文件下载到带有登录名的门户网站?

将9个3x3矩阵按特定顺序排列成9x9矩阵

在极性中创建条件累积和

迭代嵌套字典的值

多处理队列在与Forking http.server一起使用时随机跳过项目

python中的解释会在后台调用函数吗?

重置PD帧中的值

使用__json__的 pyramid 在客户端返回意外格式

如何防止html代码出现在quarto gfm报告中的pandas表之上

如何从数据框列中提取特定部分并将该值填充到其他列中?

极点用特定值替换前n行

如何在PYTHON中向单元测试S Side_Effect发送额外参数?

函数()参数';代码';必须是代码而不是字符串

为什么在安装了64位Python的64位Windows 10上以32位运行?

Django查询集-排除True值

IpyWidget Select 框未打开