code: def create_finance_metrics(metrics: list, pronacs: list):
      
      missing = missing_metrics(metrics, pronacs)
      print(f"There are {len(missing)} missing metrics!")
  
      processors = mp.cpu_count()
      print(f"Using {processors} processors to calculate metrics!")
  
      indicators_qs = FinancialIndicator.objects.filter(
          project_id__in=[p for p, _ in missing]
      )
      indicators = {i.project_id: i for i in indicators_qs}
  
      pool = mp.Pool(processors)
      results = [
          pool.apply_async(create_metric, args=(indicators, metric_name, pronac))
          for pronac, metric_name in missing
      ]
  
      calculated_metrics = [p.get() for p in results]
      if calculated_metrics:
          Metric.objects.bulk_create(calculated_metrics)
          print("Bulk completed")
  
          for indicator in indicators.values():
              indicator.fetch_weighted_complexity()
  
          print("Finished update indicators!")
  
      pool.close()
      print("Finished metrics calculation!")
docs: Creates metrics, creating an Indicator if it doesn't already exists
      Metrics are created for projects that are in pronacs and saved in
      database.
  
          args:
              metrics: list of names of metrics that will be calculated
              pronacs: pronacs in dataset that is used to calculate those metrics