Skip to content

Instantly share code, notes, and snippets.

@jkpr
Created September 19, 2019 00:15
Show Gist options
  • Save jkpr/3271aebcdb8597ff9e65dff2d136e873 to your computer and use it in GitHub Desktop.
Save jkpr/3271aebcdb8597ff9e65dff2d136e873 to your computer and use it in GitHub Desktop.
Runner
from collections import defaultdict
import logging
from pprint import pprint
import random
import queue
import threading
from solution import solution
# Set to logging.INFO for messages
logging.basicConfig(level=logging.WARNING, format='[%(levelname)s] (Thread-%(threadName)s) %(message)s')
class Messenger:
def __init__(self):
self.data = self._initialize_data()
self.messages = defaultdict(queue.Queue)
self.api_calls = defaultdict(int)
self.result = None
def _initialize_data(self):
# Modify data here:
data = [900,900,900,1,2,3,5,5,5,8,8]
return data
def get_data_size(self):
self._log_api_call()
logging.info(f'getting size ({len(self.data)})')
return len(self.data)
def get_item(self, index):
self._log_api_call()
logging.info(f'getting item [{index}], result = {self.data[index]}')
return self.data[index]
def send_message(self, receiver, message_content):
self._log_api_call()
logging.info(f'sending message to receiver {receiver}, message: {message_content}')
self.messages[receiver].put(message_content)
def receive_message(self):
self._log_api_call()
whoami = int(threading.currentThread().getName())
logging.info(f'getting message for {whoami}')
return self.messages[whoami].get()
def record_result(self, result):
self._log_api_call()
logging.info(f'SETTING RESULT = {result}')
self.result = result
def _log_api_call(self):
whoami = int(threading.currentThread().getName())
self.api_calls[whoami] += 1
def main():
messenger = Messenger()
threads = []
for i in range(1,11):
thread = threading.Thread(target=solution, args=[messenger, i], name=str(i))
threads.append(thread)
for thread in threads:
thread.start()
for thread in threads:
thread.join()
print('API call summary')
pprint(messenger.api_calls)
print(f'Recorded result: {messenger.result}')
print(f'Correct answer: {len(set(messenger.data))}')
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment