# HG changeset patch # User Ronny Pfannschmidt # Date 1346694793 -7200 # Node ID 49c5934137e5f8ac9d16ea96ac2a5c01149ad190 # Parent ec10c11ac8eb248a995c70ad2fee426315249f33 fix issue #9 - terminate the worker threadpools in safe_terminate diff -r ec10c11ac8eb248a995c70ad2fee426315249f33 -r 49c5934137e5f8ac9d16ea96ac2a5c01149ad190 CHANGELOG --- a/CHANGELOG Wed Jun 20 18:16:40 2012 +0200 +++ b/CHANGELOG Mon Sep 03 19:53:13 2012 +0200 @@ -23,6 +23,8 @@ - fix issue #2 - properly reconfigure the channels string coercion for rsync, so it can send from python2 to python3 +- fix issue #9 - propperly terminate the worker threadpools in safe_terminate + - refactor socketserver, so it can be directly remote_exec'd for starting a socket gateway on a remote diff -r ec10c11ac8eb248a995c70ad2fee426315249f33 -r 49c5934137e5f8ac9d16ea96ac2a5c01149ad190 execnet/multi.py --- a/execnet/multi.py Wed Jun 20 18:16:40 2012 +0200 +++ b/execnet/multi.py Mon Sep 03 19:53:13 2012 +0200 @@ -252,6 +252,8 @@ replylist.append(reply) for reply in replylist: reply.get() + workerpool.shutdown() + workerpool.join() default_group = Group() diff -r ec10c11ac8eb248a995c70ad2fee426315249f33 -r 49c5934137e5f8ac9d16ea96ac2a5c01149ad190 testing/test_multi.py --- a/testing/test_multi.py Wed Jun 20 18:16:40 2012 +0200 +++ b/testing/test_multi.py Mon Sep 03 19:53:13 2012 +0200 @@ -2,6 +2,8 @@ tests for multi channels and gateway Groups """ +import threading +from time import sleep import execnet import py from execnet.gateway_base import Channel @@ -193,6 +195,7 @@ def test_safe_terminate(): + active = threading.active_count() l = [] def term(): py.std.time.sleep(3) @@ -200,8 +203,12 @@ l.append(1) safe_terminate(1, [(term, kill)] * 10) assert len(l) == 10 + sleep(0.1) + py.std.gc.collect() + assert threading.active_count() == active def test_safe_terminate2(): + active = threading.active_count() l = [] def term(): return @@ -209,3 +216,6 @@ l.append(1) safe_terminate(3, [(term, kill)] * 10) assert len(l) == 0 + sleep(0.1) + py.std.gc.collect() + assert threading.active_count() == active