mirror of
https://hub.njuu.cf/TheAlgorithms/Python.git
synced 2023-10-11 13:06:12 +08:00
Fixed allocation_number (#2768)
* fixed allocation_number * fixed pre-commit * fixed line too long * fixed bug
This commit is contained in:
parent
e040ad2a01
commit
437c725e64
@ -1,37 +1,28 @@
|
||||
"""
|
||||
In a multi-threaded download, this algorithm could be used to provide
|
||||
each worker thread with a block of non-overlapping bytes to download.
|
||||
For example:
|
||||
for i in allocation_list:
|
||||
requests.get(url,headers={'Range':f'bytes={i}'})
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
|
||||
def allocation_num(number_of_bytes: int, partitions: int) -> list[str]:
|
||||
"""
|
||||
Divide a number of bytes into x partitions.
|
||||
|
||||
In a multi-threaded download, this algorithm could be used to provide
|
||||
each worker thread with a block of non-overlapping bytes to download.
|
||||
For example:
|
||||
for i in allocation_list:
|
||||
requests.get(url,headers={'Range':f'bytes={i}'})
|
||||
|
||||
parameter
|
||||
------------
|
||||
: param number_of_bytes
|
||||
: param partitions
|
||||
|
||||
return
|
||||
------------
|
||||
:param number_of_bytes: the total of bytes.
|
||||
:param partitions: the number of partition need to be allocated.
|
||||
:return: list of bytes to be assigned to each worker thread
|
||||
|
||||
Examples:
|
||||
------------
|
||||
>>> allocation_num(16647, 4)
|
||||
['0-4161', '4162-8322', '8323-12483', '12484-16647']
|
||||
>>> allocation_num(888, 888)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: partitions can not >= number_of_bytes!
|
||||
['1-4161', '4162-8322', '8323-12483', '12484-16647']
|
||||
>>> allocation_num(50000, 5)
|
||||
['1-10000', '10001-20000', '20001-30000', '30001-40000', '40001-50000']
|
||||
>>> allocation_num(888, 999)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ValueError: partitions can not >= number_of_bytes!
|
||||
ValueError: partitions can not > number_of_bytes!
|
||||
>>> allocation_num(888, -4)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
@ -39,16 +30,16 @@ def allocation_num(number_of_bytes: int, partitions: int) -> list[str]:
|
||||
"""
|
||||
if partitions <= 0:
|
||||
raise ValueError("partitions must be a positive number!")
|
||||
if partitions >= number_of_bytes:
|
||||
raise ValueError("partitions can not >= number_of_bytes!")
|
||||
if partitions > number_of_bytes:
|
||||
raise ValueError("partitions can not > number_of_bytes!")
|
||||
bytes_per_partition = number_of_bytes // partitions
|
||||
allocation_list = [f"0-{bytes_per_partition}"]
|
||||
for i in range(1, partitions - 1):
|
||||
length = f"{bytes_per_partition * i + 1}-{bytes_per_partition * (i + 1)}"
|
||||
allocation_list.append(length)
|
||||
allocation_list.append(
|
||||
f"{(bytes_per_partition * (partitions - 1)) + 1}-" f"{number_of_bytes}"
|
||||
allocation_list = []
|
||||
for i in range(partitions):
|
||||
start_bytes = i * bytes_per_partition + 1
|
||||
end_bytes = (
|
||||
number_of_bytes if i == partitions - 1 else (i + 1) * bytes_per_partition
|
||||
)
|
||||
allocation_list.append(f"{start_bytes}-{end_bytes}")
|
||||
return allocation_list
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user