Skip to content

Instantly share code, notes, and snippets.

@hankliu5
Created February 11, 2019 22:10
Show Gist options
  • Save hankliu5/e8018b1397ccf240438b434b7590ba84 to your computer and use it in GitHub Desktop.
Save hankliu5/e8018b1397ccf240438b434b7590ba84 to your computer and use it in GitHub Desktop.
import sys
import collections
class Buf():
def __init__(self, buf=0, size=0):
self.buf = buf
self.size = size
def __repr__(self):
return 'buf: {}, size: {}'.format(self.buf, self.size)
def server_thread(file_size, buf_size, thread_num):
server = [Buf(buf=0, size=0) for _ in range(thread_num)]
if (file_size % buf_size):
total_file_size = ((file_size / buf_size) + 1) * buf_size
else:
total_file_size = file_size
offset = total_file_size / thread_num
extra_file_size = total_file_size + buf_size
if (offset % buf_size):
server[0].size = ((offset / buf_size) + 1) * buf_size
else:
server[0].size = offset
for i in range(1, thread_num):
server[i].size = server[i-1].size
server[i].buf = server[i-1].buf + offset
print('extra_file_size: {}'.format(extra_file_size))
for i, buf in enumerate(server):
print(i, buf)
return server, extra_file_size
def get_fraction_for_each_client(file_size, buf_size, thread_num):
if (file_size % buf_size):
total_file_size = ((file_size / buf_size) + 1) * buf_size
else:
total_file_size = file_size
return total_file_size / thread_num
if __name__ == '__main__':
if len(sys.argv) < 4:
print('usage <file_size> <buf_size> <thread_num>')
exit(1)
(file_size, buf_size, thread_num) = tuple(map(int, sys.argv[1:]))
server, extra_file_size = server_thread(file_size, buf_size, thread_num)
fraction = get_fraction_for_each_client(file_size, buf_size, thread_num)
for offset in range(0, fraction+1, buf_size):
for thread in server:
thread.buf += buf_size
if thread.buf > extra_file_size:
print("overflow")
exit(1)
exit(0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment