#!/usr/bin/env python # coding: utf-8 import os import sys import time if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cof.settings") from django.conf import settings settings.DEBUG = True from bda.models import Spectacle, Participant, ChoixSpectacle, Attribution from bda.algorithm import Algorithm from django.db.models import Sum from django.db import connection start = time.time() shows = Spectacle.objects.all() members = Participant.objects.all() choices = ChoixSpectacle.objects.order_by('participant', 'priority').select_related().all() available_slots = Spectacle.objects.aggregate(Sum('slots'))['slots__sum'] cursor = connection.cursor() cursor.execute("SELECT SUM(`slots` * `price`) AS `total` FROM `bda_spectacle`;") total_price = cursor.fetchone()[0] print "%d spectacles" % len(shows) print "%d places" % available_slots print "%d participants" % len(members) print "%d demandes" % len(choices) print "%d places demandées" % (len(choices) + len(choices.filter(double = True).all())) print "%.02f€ à brasser" % total_price print "Récupération: %.2fs" % (time.time() - start) start_init = time.time() algo = Algorithm(shows, members, choices) print "Initialisation: %.2fs" % (time.time() - start_init) start_algo = time.time() results = algo(sys.argv[1]) print "Traitement: %.2fs" % (time.time() - start_algo) print len(connection.queries), "requêtes SQL effectuées" queries = list(connection.queries) total_slots = 0 total_losers = 0 for (_, members, losers) in results: total_slots += len(members) total_losers += len(losers) print "Placés %d\nDécus %d" % (total_slots, total_losers) print "Total %d" % (total_slots + total_losers) members2 = {} members_uniq = {} for (show, members, _) in results: for (member, _, _, _) in members: if member.id not in members_uniq: members_uniq[member.id] = member members2[member] = [] member.total = 0 member = members_uniq[member.id] members2[member].append(show) member.total += show.price if len(members) < show.slots: print "%d place(s) invendue(s) pour %s" % (show.slots - len(members), show) members2 = members2.items() print "Temps total: %.2fs" % (time.time() - start) print "Requêtes SQL:" for query in queries: print query['sql']