python队列长度不限制_ThreadPoolExecutor:如何限制队列的最大大小?

我一直在通过划分范围来达到这个目的。

这是一个有效的例子。在from time import time, strftime, sleep, gmtime

from random import randint

from itertools import islice

from concurrent.futures import ThreadPoolExecutor, as_completed

def nap(id, nap_length):

sleep(nap_length)

return nap_length

def chunked_iterable(iterable, chunk_size):

it = iter(iterable)

while True:

chunk = tuple(islice(it, chunk_size))

if not chunk:

break

yield chunk

if __name__ == '__main__':

startTime = time()

range_size = 10000000

chunk_size = 10

nap_time = 2

# Iterate in chunks.

# This consumes less memory and kicks back initial results sooner.

for chunk in chunked_iterable(range(range_size), chunk_size):

with ThreadPoolExecutor(max_workers=chunk_size) as pool_executor:

pool = {}

for i in chunk:

function_call = pool_executor.submit(nap, i, nap_time)

pool[function_call] = i

for completed_function in as_completed(pool):

result = completed_function.result()

i = pool[completed_function]

print('{} completed @ {} and slept for {}'.format(

str(i + 1).zfill(4),

strftime("%H:%M:%S", gmtime()),

result))

print('== - Script took {} seconds. -=='.format(

round(time() - startTime)))

这种方法的缺点是块是同步的。在将下一个块添加到池之前,必须完成块中的所有线程。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值