先说环境,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
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.