40 lines
1.0 KiB
Python
40 lines
1.0 KiB
Python
from multiprocessing import cpu_count, Pool
|
|
|
|
from django.core.management.base import BaseCommand
|
|
from django.db import connection
|
|
|
|
from apps.herd.models import Rancher
|
|
from .link_ranchers_parallel_worker import process_city
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = "Parallel link ranchers to cooperative by city"
|
|
|
|
def add_arguments(self, parser):
|
|
parser.add_argument(
|
|
'--worker',
|
|
type=int,
|
|
default=cpu_count() // 2
|
|
)
|
|
|
|
def handle(self, *args, **options):
|
|
workers = options['workers']
|
|
|
|
city_ids = (
|
|
Rancher.objects.filter(city__isnull=False)
|
|
.values_list('city_id', flat=True)
|
|
.distinct()
|
|
)
|
|
|
|
self.stdout.write(
|
|
f"Starting parallel sync for {len(city_ids)} cities "
|
|
f"with {workers} workers"
|
|
)
|
|
|
|
connection.close()
|
|
|
|
with Pool(processes=workers) as pool:
|
|
pool.map(process_city, city_ids)
|
|
|
|
self.stdout.write(self.style.SUCCESS("DONE ✅"))
|