import threading
import time
from queue import Queue
from threading import Thread
mutex = threading.Lock()
queue = Queue()
data = []
def produce(i):
for i in range(i):
queue.put_nowait((time.time(), [1, 2, 3]))
def consume():
while True:
while queue.qsize():
get_queue = queue.get()
ds_time = get_queue[0]
per_ds = get_queue[1]
data.append(per_ds)
while int(time.time()) - int(ds_time) < 3:
continue
# 加锁
mutex.acquire()
if data:
files = []
for index, item in enumerate(data):
files.append(item)
print(files)
# 上传文件
# upload_file(files)
# 清空数据
data.clear()
# 释放锁
mutex.release()
t2 = Thread(target=consume)
t2.start()
for i in range(3):
produce(10)
time.sleep(5)
运行结果
总结
生产者每次通过非等待式插入队列中,假定设置每个生产者相隔5秒发送数据,消费者接收数据,获取数据后等待若干秒,通常小于第二批生产的时间,这样每批都能生产10个数据,消费10个数据。最后拿到每批数据并分批批量处理