当前位置:   article > 正文

python3多进程 queue 取值_多进程队列 multiprocessing.Queue() 通过 get 方法获取数据很慢, 1000 条要 5 秒多...

queue.put python太慢

先说环境,win10 系统,1903,Python3.7.4 64 位,没有用第三方库,同样的代码在 windows (本机)上和 linux 上运行结果不一样,时间差的太大了。补充 linux 环境,Ubuntu 18.04.3 LTS,4.15.0-58-generic,Python3.6.8 64 位。

ps:windows 上 3.6.8 我也试了,还是一样的结果

然后上代码

# -*- coding: utf-8 -*-

import random

import string

import threading

import time

import multiprocessing

queue = multiprocessing.Queue()

def get_str():

s = string.digits + string.ascii_letters

while True:

if queue.qsize() < 10000:

for _ in range(10000):

aaa = ''.join([random.choice(s) for _ in range(random.randint(20, 50))])

queue.put(aaa)

def get_data(queue):

print('insert')

while True:

if queue.qsize() == 0:

time.sleep(2)

continue

start = time.time()

temp = []

for _ in range(1000):

temp.append(queue.get())

print(f'获取 1000 条数据需要的时间为:{time.time() - start:.2f}')

time.sleep(2)

def get_size(queue):

print('size')

while True:

print(f'队列大小为:{queue.qsize()}')

time.sleep(1)

if __name__ == '__main__':

multiprocessing.freeze_support()

multiprocessing.Process(args=(queue,), target=get_data).start()

threading.Thread(args=(), target=get_str).start()

threading.Thread(args=(queue,), target=get_size).start()

windows 下运行结果(截取一部分,代码为死循环)为:

size

队列大小为:2

insert

队列大小为:19875

队列大小为:19593

队列大小为:19457

队列大小为:19266

队列大小为:19097

获取 1000 条数据需要的时间为:5.65

队列大小为:19000

队列大小为:19000

队列大小为:18776

队列大小为:18634

队列大小为:18430

队列大小为:18283

队列大小为:18070

获取 1000 条数据需要的时间为:4.48

队列大小为:18000

队列大小为:18000

队列大小为:17689

队列大小为:17549

队列大小为:17399

队列大小为:17256

队列大小为:17093

获取 1000 条数据需要的时间为:5.55

队列大小为:17000

队列大小为:17000

队列大小为:16763

linux 下运行结果(截取一部分,代码为死循环)为:

insert

size

队列大小为:1

获取 1000 条数据需要的时间为:0.08

队列大小为:19000

队列大小为:19000

获取 1000 条数据需要的时间为:0.01

队列大小为:18000

队列大小为:18000

获取 1000 条数据需要的时间为:0.02

队列大小为:17000

队列大小为:17000

获取 1000 条数据需要的时间为:0.01

队列大小为:16000

队列大小为:16000

获取 1000 条数据需要的时间为:0.01

队列大小为:15000

队列大小为:15000

获取 1000 条数据需要的时间为:0.01

队列大小为:14000

队列大小为:14000

获取 1000 条数据需要的时间为:0.01

队列大小为:13000

队列大小为:13000

获取 1000 条数据需要的时间为:0.01

队列大小为:12000

队列大小为:12000

获取 1000 条数据需要的时间为:0.02

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号