summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcreate-files111
1 files changed, 47 insertions, 64 deletions
diff --git a/create-files b/create-files
index c71f495..6cebc6c 100755
--- a/create-files
+++ b/create-files
@@ -1,77 +1,60 @@
#!/usr/bin/env python3
-import json
+
import os
import sys
import time
-billion = 10 ** 9
-per_level = 10 ** 3
-interval = 2
-state_filename = "state.json"
-
-
-def level(i, n):
- return (i % (per_level ** n)) / (per_level ** (n - 1))
-
-
-def pathname(i):
- fullname = "{:09d}".format(i)
- dir1 = fullname[-9:-6]
- dir2 = fullname[-6:-3]
- dirname = "{}/{}".format(dir1, dir2)
- basename = fullname[-3:]
- return dirname, basename
-
-
-def create_dir(root, dirname):
- try:
- os.makedirs(os.path.join(root, dirname))
- except OSError:
- pass
-
+def dirnames(a, b):
+ dir_a = f"{root}/{a}"
+ dir_b = os.path.join(dir_a, str(b))
+ if not os.path.exists(dir_a):
+ os.mkdir(dir_a)
+ if not os.path.exists(dir_b):
+ os.mkdir(dir_b)
+ return dir_a, dir_b
-def create_file(root, dirname, basename):
- try:
- open(os.path.join(root, dirname, basename), "w")
- except OSError:
- return
-
-
-def load_state():
- try:
- return json.load(open(state_filename))
- except IOError:
- return {}
-
-
-def save_state(i):
- state = {"current": i}
- with open(state_filename, "w") as f:
- json.dump(state, f)
+started = time.time()
root = sys.argv[1]
-start = int(sys.argv[2])
-end = int(sys.argv[3])
-
-start = load_state().get("current", start)
+if not os.path.exists(root):
+ os.mkdir(root)
-curdir = None
-last_checkpoint = time.time()
-
-i = start
-while i < end:
- dirname, basename = pathname(i)
- if dirname != curdir:
- create_dir(root, dirname)
- curdir = dirname
- create_file(root, dirname, basename)
+billion = 10 ** 9
+per_level = 10 ** 3
+a = b = c = 0
+dir_a, dir_b = dirnames(a, b)
+prev_status = 0
+for i in range(billion):
+ filename = os.path.join(dir_b, f"file-{i}")
+ open(filename, "w").close()
+
+ c += 1
+ if c == per_level:
+ c = 0
+ b += 1
+ if b == per_level:
+ b = 0
+ a += 1
+ dir_a, dir_b = dirnames(a, b)
+
+ percent = 100.0 * float(i) / float(billion)
now = time.time()
- if now > last_checkpoint + interval:
- save_state(i)
- last_checkpoint = now
- i += 1
-
-save_state(i)
+ duration = now - started
+ if duration > 1:
+ speed = i / duration
+ else:
+ speed = 1
+ if speed < 1:
+ print(speed, i, duration)
+ eta = (billion - i) / speed
+
+ if now - prev_status > 1:
+ sys.stdout.write(
+ f"\rCreated {c} of {billion} files ({percent:.2f}%), at {speed:.0f}/s, {eta:.0f}s remaining"
+ )
+ prev_status = now
+
+sys.stdout.write("\n")