@@ -647,6 +647,55 @@ def test_created_with_capi(self):
647647 self .interp_exists (interpid ))
648648
649649
650+ def test_remaining_threads (self ):
651+ r_interp , w_interp = self .pipe ()
652+
653+ FINISHED = b'F'
654+
655+ interp = interpreters .create ()
656+ interp .exec (f"""if True:
657+ import os
658+ import threading
659+ import time
660+
661+ def task():
662+ time.sleep(1)
663+ os.write({ w_interp } , { FINISHED !r} )
664+
665+ threads = [threading.Thread(target=task) for _ in range(3)]
666+ for t in threads:
667+ t.start()
668+ """ )
669+ interp .close ()
670+
671+ self .assertEqual (os .read (r_interp , 1 ), FINISHED )
672+
673+ def test_remaining_daemon_threads (self ):
674+ interp = _interpreters .create (
675+ types .SimpleNamespace (
676+ use_main_obmalloc = False ,
677+ allow_fork = False ,
678+ allow_exec = False ,
679+ allow_threads = True ,
680+ allow_daemon_threads = True ,
681+ check_multi_interp_extensions = True ,
682+ gil = 'own' ,
683+ )
684+ )
685+ _interpreters .exec (interp , f"""if True:
686+ import threading
687+ import time
688+
689+ def task():
690+ time.sleep(100)
691+
692+ threads = [threading.Thread(target=task, daemon=True) for _ in range(3)]
693+ for t in threads:
694+ t.start()
695+ """ )
696+ _interpreters .destroy (interp )
697+
698+
650699class TestInterpreterPrepareMain (TestBase ):
651700
652701 def test_empty (self ):
@@ -756,7 +805,10 @@ def script():
756805 spam.eggs()
757806
758807 interp = interpreters.create()
759- interp.exec(script)
808+ try:
809+ interp.exec(script)
810+ finally:
811+ interp.close()
760812 """ )
761813
762814 stdout , stderr = self .assert_python_failure (scriptfile )
@@ -765,7 +817,7 @@ def script():
765817 # File "{interpreters.__file__}", line 179, in exec
766818 self .assertEqual (stderr , dedent (f"""\
767819 Traceback (most recent call last):
768- File "{ scriptfile } ", line 9 , in <module>
820+ File "{ scriptfile } ", line 10 , in <module>
769821 interp.exec(script)
770822 ~~~~~~~~~~~^^^^^^^^
771823 { interpmod_line .strip ()}
0 commit comments