Add examples of prompt_toolkit

This commit is contained in:
2024-05-26 00:36:58 -04:00
parent 11f98d078f
commit f6ee4292ea
11 changed files with 715 additions and 5 deletions

View File

@ -1,10 +1,32 @@
#!/usr/bin/env python3
import timeit
from functools import partial
from time import sleep
from typing import List
from random import randint
from typing import Dict
from concurrent.futures import ThreadPoolExecutor, Future
results: list[int] = []
from prompt_toolkit.shortcuts import ProgressBar
from pydantic import BaseModel
results: List[int] = []
class Result(BaseModel):
result: int
def __repr__(self) -> str:
return f"Result: {self.result} {id(self)}"
class Requests:
requests: Dict[str, Result] = {}
odd_requests: Dict[str, Result] = {}
even_requests: Dict[str, Result] = {}
def __repr__(self) -> str:
return f"Requests: {self.requests}\nOdd requests: {self.odd_requests}\nEven requests: {self.even_requests}"
def add_one(number: int) -> int:
@ -18,10 +40,11 @@ def aggregate_results(future: Future):
def first_method():
with ThreadPoolExecutor(32) as executor:
futures = [executor.submit(add_one, number) for number in range(10)]
for future in futures:
future.add_done_callback(aggregate_results)
with ProgressBar() as pb:
with ThreadPoolExecutor(32) as executor:
futures = [executor.submit(add_one, number) for number in range(10)]
for future in pb(futures, label="Processing tasks..."):
future.add_done_callback(aggregate_results)
def second_method():
@ -32,6 +55,42 @@ def second_method():
futures[-1].add_done_callback(aggregate_results)
def add_one_result(result: Result) -> Result:
result.result += 1
return result
def add_one_fut(future: Future):
result = future.result()
if result.result % 2 == 0:
Requests.even_requests[str(result.result)] = result
else:
Requests.odd_requests[str(result.result)] = result
def third_method():
for number in range(10):
result = Result(result=randint(0, 100))
Requests.requests[str(number)] = result
if result.result % 2 == 0:
Requests.even_requests[str(result.result)] = result
else:
Requests.odd_requests[str(result.result)] = result
futures = []
with ThreadPoolExecutor(32) as executor:
for _, request in Requests.requests.items():
future = executor.submit(add_one_result, request)
future.add_done_callback(add_one_fut)
futures.append(future)
print("Done waiting!")
print(Requests.requests)
print("odd:", Requests.odd_requests)
print("even:", Requests.even_requests)
print("All done!")
def main():
print(timeit.timeit(first_method, number=1))
print(results)
@ -41,6 +100,8 @@ def main():
print(results)
print("All done!")
third_method()
if __name__ == "__main__":
main()