1+ from concurrent .futures import ProcessPoolExecutor
12import gzip
23import logging
34import os
@@ -498,6 +499,8 @@ def _init_worker(server_queue: Queue):
498499 A queue of object implementing BaseServer to initialize (or anything with a init
499500 method).
500501 """
502+ print ("initializing server instance with on process" , os .getpid ())
503+ print (f"using queue { server_queue } " )
501504 server_instance = server_queue .get () # type: "WebArenaInstanceVars"
502505 logger .warning (f"Initializing server instance { server_instance } from process { os .getpid ()} " )
503506 server_instance .init ()
@@ -510,6 +513,42 @@ def _run_study(study: Study, n_jobs, parallel_backend, strict_reproducibility, n
510513
511514@dataclass
512515class ParallelStudies (SequentialStudies ):
516+ parallel_servers : list [BaseServer ] | int = None
517+
518+ def _run (
519+ self ,
520+ n_jobs = 1 ,
521+ parallel_backend = "ray" ,
522+ strict_reproducibility = False ,
523+ n_relaunch = 3 ,
524+ ):
525+ parallel_servers = self .parallel_servers
526+ if isinstance (parallel_servers , int ):
527+ parallel_servers = [BaseServer () for _ in range (parallel_servers )]
528+
529+ server_queue = Manager ().Queue ()
530+ for server in parallel_servers :
531+ server_queue .put (server )
532+
533+ with ProcessPoolExecutor (
534+ max_workers = len (parallel_servers ), initializer = _init_worker , initargs = (server_queue ,)
535+ ) as executor :
536+ # Create list of arguments for each study
537+ study_args = [
538+ (study , n_jobs , parallel_backend , strict_reproducibility , n_relaunch )
539+ for study in self .studies
540+ ]
541+
542+ # Submit all tasks and wait for completion
543+ futures = [executor .submit (_run_study , * args ) for args in study_args ]
544+
545+ # Wait for all futures to complete and raise any exceptions
546+ for future in futures :
547+ future .result ()
548+
549+
550+ @dataclass
551+ class ParallelStudies_alt (SequentialStudies ):
513552
514553 parallel_servers : list [BaseServer ] | int = None
515554
0 commit comments