updated chapter 4 and appendix-A files
This commit is contained in:
46
appendix-A/arcfour_futures.py
Normal file
46
appendix-A/arcfour_futures.py
Normal file
@@ -0,0 +1,46 @@
|
||||
import sys
|
||||
import time
|
||||
from concurrent import futures
|
||||
from random import randrange
|
||||
from arcfour import arcfour
|
||||
|
||||
JOBS = 12
|
||||
SIZE = 2**18
|
||||
|
||||
KEY = b"'Twas brillig, and the slithy toves\nDid gyre"
|
||||
STATUS = '{} workers, elapsed time: {:.2f}s'
|
||||
|
||||
|
||||
def arcfour_test(size, key):
|
||||
in_text = bytearray(randrange(256) for i in range(size))
|
||||
cypher_text = arcfour(key, in_text)
|
||||
out_text = arcfour(key, cypher_text)
|
||||
assert in_text == out_text, 'Failed arcfour_test'
|
||||
return size
|
||||
|
||||
|
||||
def main(workers=None):
|
||||
if workers:
|
||||
workers = int(workers)
|
||||
t0 = time.time()
|
||||
|
||||
with futures.ProcessPoolExecutor(workers) as executor:
|
||||
actual_workers = executor._max_workers
|
||||
to_do = []
|
||||
for i in range(JOBS, 0, -1):
|
||||
size = SIZE + int(SIZE / JOBS * (i - JOBS/2))
|
||||
job = executor.submit(arcfour_test, size, KEY)
|
||||
to_do.append(job)
|
||||
|
||||
for future in futures.as_completed(to_do):
|
||||
res = future.result()
|
||||
print('{:.1f} KB'.format(res/2**10))
|
||||
|
||||
print(STATUS.format(actual_workers, time.time() - t0))
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) == 2:
|
||||
workers = int(sys.argv[1])
|
||||
else:
|
||||
workers = None
|
||||
main(workers)
|
||||
Reference in New Issue
Block a user