88import logging
99import os
1010import shutil
11+ import sys
1112import zipfile
1213
1314import docker
@@ -234,7 +235,13 @@ async def run(data_provider, commit, test_cases, base_dir, remote_dir):
234235def run_tests (
235236 data_provider , storage_provider , commit , test_cases , base_dir , remote_dir
236237):
237- loop = asyncio .get_event_loop ()
238+ try :
239+ loop = asyncio .get_event_loop ()
240+ except RuntimeError :
241+ # No event loop in current thread, create a new one
242+ loop = asyncio .new_event_loop ()
243+ asyncio .set_event_loop (loop )
244+
238245 run_task = run (data_provider , commit , test_cases , base_dir , remote_dir )
239246 loop .run_until_complete (run_task )
240247 # loop.close()
@@ -304,8 +311,9 @@ def rmtree_handler(_func, _path, exc_info):
304311 shutil .rmtree (base_dir , onexc = rmtree_handler )
305312
306313
307- def process_commit (data_provider , commit ):
308- cfg = rcc .config .get_config (rcc .config .DEFAULT_CONFIG )
314+ def process_commit (data_provider , commit , cfg = None ):
315+ if cfg is None :
316+ cfg = rcc .config .get_config (rcc .config .DEFAULT_CONFIG )
309317 logger = logging .getLogger (rcc .config .DEFAULT_LOGGER )
310318 logger .debug (
311319 "[{c.id}]"
@@ -396,10 +404,27 @@ def process_commit(data_provider, commit):
396404 logger .debug ("[{c.id}] Commit processing done" .format (c = commit ))
397405
398406
399- def process_commits (data_provider , commit_queue ):
407+ def process_commits (data_provider , commit_queue , cfg = None ):
408+ # Set up logging for worker process
400409 logger = logging .getLogger (rcc .config .DEFAULT_LOGGER )
410+
411+ # Only add handlers if logger doesn't have any (worker processes don't inherit parent's handlers)
412+ if not logger .handlers :
413+ logger .setLevel (logging .DEBUG )
414+ console_handler = logging .StreamHandler (sys .stderr )
415+ console_fmt = logging .Formatter (
416+ "[%(asctime)s] %(module)s:%(lineno)d: <%(process)d> %(message)s"
417+ )
418+ console_handler .setFormatter (console_fmt )
419+ logger .addHandler (console_handler )
420+
401421 logger .debug ("Worker started" )
402422
423+ # Register configuration if provided
424+ if cfg is not None :
425+ # Access the underlying configuration dictionary
426+ rcc .config .from_dict (rcc .config .DEFAULT_CONFIG , cfg .get_dict ())
427+
403428 # exceptions that stop the worker
404429 non_retryable_exceptions = (
405430 KeyboardInterrupt ,
@@ -418,7 +443,7 @@ def process_commits(data_provider, commit_queue):
418443 # Hint to stop processing, mark empty task as done (in finally block) and bail
419444 break
420445
421- process_commit (data_provider , commit )
446+ process_commit (data_provider , commit , cfg )
422447
423448 # If exception should stop the worker
424449 except non_retryable_exceptions as e :
0 commit comments