import json
import time
import threading
import queue
class FormSubmissionSync:
def __init__(self, resource_queue):
self.resource_queue = resource_queue # Queue of form submissions
self.lock = threading.Lock() # Lock for thread safety
def worker(self):
while True:
try:
form_submission = self.resource_queue.get(timeout=1) # Get submission, timeout after 1 sec
self.process_submission(form_submission)
self.resource_queue.task_done() # Signal task completion
except queue.Empty:
# No more submissions, exit worker
break
def process_submission(self, submission):
# Simulate resource processing
time.sleep(submission['processing_time'])
print(f"Processed submission: {submission['id']}")
def sync_resources(self, submissions):
# Populate the queue with submissions
for submission in submissions:
self.resource_queue.put(submission)
# Create and start worker threads
num_workers = 4
threads = []
for _ in range(num_workers):
thread = threading.Thread(target=self.worker)
thread.daemon = True # Allow main thread to exit even if workers are running
threads.append(thread)
thread.start()
# Wait for all submissions to complete
self.resource_queue.join()
# Wait for all threads to finish
for thread in threads:
thread.join()
if __name__ == '__main__':
# Example Usage
submissions = [
{'id': 1, 'data': 'data1', 'processing_time': 2},
{'id': 2, 'data': 'data2', 'processing_time': 1},
{'id': 3, 'data': 'data3', 'processing_time': 3},
{'id': 4, 'data': 'data4', 'processing_time': 1},
{'id': 5, 'data': 'data5', 'processing_time': 2},
]
resource_queue = queue.Queue()
sync = FormSubmissionSync(resource_queue)
sync.sync_resources(submissions)
print("All submissions processed.")
Add your comment