Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

A way to specify policies for a specific backend

Aperta
#274 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
25/100
Tipo di issue
Funzionalità
Chiarezza
Da chiarire
Stato di attività
Attiva
Stack tecnologico
python
Ambito
api, backend

Direzione di ricerca

Read the existing controller API and the OpenBLASController implementation, then review how set_num_threads applies limits. The issue presents alternative policy hooks but does not choose a design; first determine which extension point fits the stated backend policies. Done means a selected design supports the intended policies, with tests covering the behavior.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

We have discussed multiple potential examples of having specific policies for specific libraries' backends, mostly OpenBLAS+pthreads:

  • Limit to just 1 core (i.e. inline in current thread) or all cores, don't set any other limits but those two. These are really the most common ones you'd want for a shared process-level thread pool. "All cores" is a concept outside of threadpoolctl's scope, though!
  • Only allow setting limits on the main thread, basically: https://github.com/joblib/joblib/pull/1871#discussion_r4340880131

The current API doesn't have great ergonomics for this though.

One approach is to push policies down into threadpoolctl. But that seems difficult, e.g. "all cores" example above (until Python grows a cpu count API that knows about cgroups, at least).

Another approach is to allow libraries (really, joblib) to hook in and define their own policies.

Potential designs

Replace default controller class with custom controller class

from joblib import cpu_count

from threadpoolctl import OpenBLASController, replace_controller

class JoblibOpenBLASController(OpenBLASController):
    def set_num_threads(self, num_cores):
         if self.threading_layer == "openmp":
             return super().set_num_threads(num_cores)

         cpus = cpu_count()
         if num_cores >= 0.75 * cpus:
             num_cores = cpus
         else
             num_cores = 1
         return super().set_num_threads(num_cores)

replace_controller(OpenBLASController, JoblibOpenBLASController)

Register custom policy just for set_num_threads

from joblib import cpu_count

from threadpoolctl import OpenBLASController

def transform_num_threads(controller, num_cores):
         if controller.threading_layer == "openmp":
             return num_cores

         cpus = cpu_count()
         if num_cores >= 0.75 * cpus:
             return cpus
         else
             return 1
         return super().set_num_threads(num_cores)

OpenBLASController.set_transform_num_threads_before_setting_hook(transform_num_threads)
... other ideas?
Lingua principale
Python
Stelle
434
Fork
38
Merge medio
2g 14h
PR unite (30g)
8

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di joblib/threadpoolctl

Tutte le issue di joblib/threadpoolctl

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.