rclone-api 1.1.58__py2.py3-none-any.whl → 1.1.59__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rclone_api/profile/mount_copy_bytes.py +52 -24
- {rclone_api-1.1.58.dist-info → rclone_api-1.1.59.dist-info}/METADATA +1 -1
- {rclone_api-1.1.58.dist-info → rclone_api-1.1.59.dist-info}/RECORD +7 -7
- {rclone_api-1.1.58.dist-info → rclone_api-1.1.59.dist-info}/LICENSE +0 -0
- {rclone_api-1.1.58.dist-info → rclone_api-1.1.59.dist-info}/WHEEL +0 -0
- {rclone_api-1.1.58.dist-info → rclone_api-1.1.59.dist-info}/entry_points.txt +0 -0
- {rclone_api-1.1.58.dist-info → rclone_api-1.1.59.dist-info}/top_level.txt +0 -0
|
@@ -6,7 +6,7 @@ import argparse
|
|
|
6
6
|
import os
|
|
7
7
|
import shutil
|
|
8
8
|
import time
|
|
9
|
-
from concurrent.futures import
|
|
9
|
+
from concurrent.futures import Future, ThreadPoolExecutor
|
|
10
10
|
from dataclasses import dataclass
|
|
11
11
|
from pathlib import Path
|
|
12
12
|
|
|
@@ -21,7 +21,8 @@ os.environ["RCLONE_API_VERBOSE"] = "1"
|
|
|
21
21
|
@dataclass
|
|
22
22
|
class Args:
|
|
23
23
|
direct_io: bool
|
|
24
|
-
num: int
|
|
24
|
+
num: int
|
|
25
|
+
size: SizeSuffix | None
|
|
25
26
|
|
|
26
27
|
|
|
27
28
|
@dataclass
|
|
@@ -156,19 +157,29 @@ def _run_profile(
|
|
|
156
157
|
print(f"Time: {diff:.1f} seconds")
|
|
157
158
|
|
|
158
159
|
|
|
159
|
-
def test_profile_copy_bytes(
|
|
160
|
+
def test_profile_copy_bytes(
|
|
161
|
+
args: Args,
|
|
162
|
+
rclone: Rclone,
|
|
163
|
+
offset: SizeSuffix,
|
|
164
|
+
transfer_list: list[int] | None,
|
|
165
|
+
mount_root_path: Path,
|
|
166
|
+
size: SizeSuffix | None,
|
|
167
|
+
) -> None:
|
|
160
168
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
169
|
+
if size:
|
|
170
|
+
sizes = [size.as_int()]
|
|
171
|
+
else:
|
|
172
|
+
sizes = [
|
|
173
|
+
# 1024 * 1024 * 1,
|
|
174
|
+
# 1024 * 1024 * 2,
|
|
175
|
+
# 1024 * 1024 * 4,
|
|
176
|
+
# 1024 * 1024 * 8,
|
|
177
|
+
1024 * 1024 * 16,
|
|
178
|
+
# 1024 * 1024 * 32,
|
|
179
|
+
1024 * 1024 * 64,
|
|
180
|
+
1024 * 1024 * 128,
|
|
181
|
+
# 1024 * 1024 * 256,
|
|
182
|
+
]
|
|
172
183
|
# transfer_list = [1, 2, 4, 8, 16]
|
|
173
184
|
transfer_list = transfer_list or [1, 2, 4]
|
|
174
185
|
|
|
@@ -176,16 +187,14 @@ def test_profile_copy_bytes(args: Args, rclone: Rclone, offset: SizeSuffix, tran
|
|
|
176
187
|
# sftp mount
|
|
177
188
|
src_file = "src:aa_misc_data/aa_misc_data/world_lending_library_2024_11.tar.zst"
|
|
178
189
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
for size in sizes:
|
|
190
|
+
for sz in sizes:
|
|
182
191
|
for transfers in transfer_list:
|
|
183
192
|
_run_profile(
|
|
184
193
|
rclone=rclone,
|
|
185
194
|
src_file=src_file,
|
|
186
195
|
transfers=transfers,
|
|
187
196
|
offset=offset,
|
|
188
|
-
size=SizeSuffix(
|
|
197
|
+
size=SizeSuffix(sz),
|
|
189
198
|
direct_io=args.direct_io,
|
|
190
199
|
log_dir=mount_root_path,
|
|
191
200
|
)
|
|
@@ -196,8 +205,11 @@ def _parse_args() -> Args:
|
|
|
196
205
|
parser = argparse.ArgumentParser(description="Profile copy_bytes")
|
|
197
206
|
parser.add_argument("--direct-io", help="Use direct IO", action="store_true")
|
|
198
207
|
parser.add_argument("-n", "--num", help="Number of workers", type=int, default=1)
|
|
208
|
+
parser.add_argument(
|
|
209
|
+
"--size", help="Size of the file to download", type=SizeSuffix, default=None
|
|
210
|
+
)
|
|
199
211
|
args = parser.parse_args()
|
|
200
|
-
return Args(direct_io=args.direct_io, num=args.num)
|
|
212
|
+
return Args(direct_io=args.direct_io, num=args.num, size=args.size)
|
|
201
213
|
|
|
202
214
|
|
|
203
215
|
def main() -> None:
|
|
@@ -218,11 +230,23 @@ def main() -> None:
|
|
|
218
230
|
transfer_list = [1]
|
|
219
231
|
parallel_workers = args.num
|
|
220
232
|
|
|
221
|
-
def task(
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
233
|
+
def task(
|
|
234
|
+
offset: SizeSuffix,
|
|
235
|
+
args=args,
|
|
236
|
+
rclone=rclone,
|
|
237
|
+
transfer_list=transfer_list,
|
|
238
|
+
mount_root_path=mount_root_path,
|
|
239
|
+
):
|
|
240
|
+
return test_profile_copy_bytes(
|
|
241
|
+
args=args,
|
|
242
|
+
rclone=rclone,
|
|
243
|
+
offset=offset,
|
|
244
|
+
mount_root_path=mount_root_path,
|
|
245
|
+
transfer_list=transfer_list,
|
|
246
|
+
size=args.size,
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
with ThreadPoolExecutor(max_workers=parallel_workers) as _:
|
|
226
250
|
tasks: list[Future] = []
|
|
227
251
|
for i in range(parallel_workers):
|
|
228
252
|
offset = SizeSuffix(i * 1024 * 1024 * 256)
|
|
@@ -231,4 +255,8 @@ def main() -> None:
|
|
|
231
255
|
|
|
232
256
|
|
|
233
257
|
if __name__ == "__main__":
|
|
258
|
+
import sys
|
|
259
|
+
|
|
260
|
+
sys.argv.append("--size")
|
|
261
|
+
sys.argv.append("16MB")
|
|
234
262
|
main()
|
|
@@ -25,7 +25,7 @@ rclone_api/cmd/copy_large_s3.py,sha256=-rfedi-ZzPUdCSP8ai9LRL0y1xVkvN-viQQlk8HVU
|
|
|
25
25
|
rclone_api/cmd/list_files.py,sha256=x8FHODEilwKqwdiU1jdkeJbLwOqUkUQuDWPo2u_zpf0,741
|
|
26
26
|
rclone_api/experimental/flags.py,sha256=qCVD--fSTmzlk9hloRLr0q9elzAOFzPsvVpKM3aB1Mk,2739
|
|
27
27
|
rclone_api/experimental/flags_base.py,sha256=ajU_czkTcAxXYU-SlmiCfHY7aCQGHvpCLqJ-Z8uZLk0,2102
|
|
28
|
-
rclone_api/profile/mount_copy_bytes.py,sha256=
|
|
28
|
+
rclone_api/profile/mount_copy_bytes.py,sha256=ZfwKJ9hYQgFN8Xo2IWTQwvcTJf_DZgTxqVSHWUFrWUc,7522
|
|
29
29
|
rclone_api/s3/api.py,sha256=qxtRDUpHYqJ7StJRtP8U_PbF_BvYRg705568SyvF-R0,3770
|
|
30
30
|
rclone_api/s3/basic_ops.py,sha256=hK3366xhVEzEcjz9Gk_8lFx6MRceAk72cax6mUrr6ko,2104
|
|
31
31
|
rclone_api/s3/chunk_file.py,sha256=D6wM9Nuu73LNGC8JCCfevqjF3qdZ21mQxYQClFLZLMU,3726
|
|
@@ -33,9 +33,9 @@ rclone_api/s3/chunk_types.py,sha256=LbXayXY1KgVU1LkdbASD_BQ7TpVpwVnzMjtz--8LBaE,
|
|
|
33
33
|
rclone_api/s3/create.py,sha256=wgfkapv_j904CfKuWyiBIWJVxfAx_ftemFSUV14aT68,3149
|
|
34
34
|
rclone_api/s3/types.py,sha256=yBnJ38Tjk6RlydJ-sqZ7DSfyFloy8KDYJ0mv3vlOzLE,1388
|
|
35
35
|
rclone_api/s3/upload_file_multipart.py,sha256=y9azNAU8QH5Ovwz33V2HZwNmJdlFjJg-jrXLZ1gtMds,10364
|
|
36
|
-
rclone_api-1.1.
|
|
37
|
-
rclone_api-1.1.
|
|
38
|
-
rclone_api-1.1.
|
|
39
|
-
rclone_api-1.1.
|
|
40
|
-
rclone_api-1.1.
|
|
41
|
-
rclone_api-1.1.
|
|
36
|
+
rclone_api-1.1.59.dist-info/LICENSE,sha256=b6pOoifSXiUaz_lDS84vWlG3fr4yUKwB8fzkrH9R8bQ,1064
|
|
37
|
+
rclone_api-1.1.59.dist-info/METADATA,sha256=QqrdtjJ4QCKu2FgqOVTNYX1z9J65tfdF7EsKUqvrHcg,4537
|
|
38
|
+
rclone_api-1.1.59.dist-info/WHEEL,sha256=rF4EZyR2XVS6irmOHQIJx2SUqXLZKRMUrjsg8UwN-XQ,109
|
|
39
|
+
rclone_api-1.1.59.dist-info/entry_points.txt,sha256=TV8kwP3FRzYwUEr0RLC7aJh0W03SAefIJNXTJ-FdMIQ,200
|
|
40
|
+
rclone_api-1.1.59.dist-info/top_level.txt,sha256=EvZ7uuruUpe9RiUyEp25d1Keq7PWYNT0O_-mr8FCG5g,11
|
|
41
|
+
rclone_api-1.1.59.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|