{"action":"created","issue":{"url":"https://api.github.com/repos/log2timeline/plaso/issues/399","labels_url":"https://api.github.com/repos/log2timeline/plaso/issues/399/labels{/name}","comments_url":"https://api.github.com/repos/log2timeline/plaso/issues/399/comments","events_url":"https://api.github.com/repos/log2timeline/plaso/issues/399/events","html_url":"https://github.com/log2timeline/plaso/issues/399","id":114294295,"number":399,"title":"Process completes but does not exit (leaving stranded workers)","user":{"login":"smclinden","id":8810661,"avatar_url":"https://avatars.githubusercontent.com/u/8810661?v=3","gravatar_id":"","url":"https://api.github.com/users/smclinden","html_url":"https://github.com/smclinden","followers_url":"https://api.github.com/users/smclinden/followers","following_url":"https://api.github.com/users/smclinden/following{/other_user}","gists_url":"https://api.github.com/users/smclinden/gists{/gist_id}","starred_url":"https://api.github.com/users/smclinden/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smclinden/subscriptions","organizations_url":"https://api.github.com/users/smclinden/orgs","repos_url":"https://api.github.com/users/smclinden/repos","events_url":"https://api.github.com/users/smclinden/events{/privacy}","received_events_url":"https://api.github.com/users/smclinden/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/log2timeline/plaso/labels/bug","name":"bug","color":"fc2929"}],"state":"open","locked":false,"assignee":{"login":"Onager","id":1298404,"avatar_url":"https://avatars.githubusercontent.com/u/1298404?v=3","gravatar_id":"","url":"https://api.github.com/users/Onager","html_url":"https://github.com/Onager","followers_url":"https://api.github.com/users/Onager/followers","following_url":"https://api.github.com/users/Onager/following{/other_user}","gists_url":"https://api.github.com/users/Onager/gists{/gist_id}","starred_url":"https://api.github.com/users/Onager/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Onager/subscriptions","organizations_url":"https://api.github.com/users/Onager/orgs","repos_url":"https://api.github.com/users/Onager/repos","events_url":"https://api.github.com/users/Onager/events{/privacy}","received_events_url":"https://api.github.com/users/Onager/received_events","type":"User","site_admin":false},"milestone":null,"comments":18,"created_at":"2015-10-30T15:39:24Z","updated_at":"2015-11-21T20:48:51Z","closed_at":null,"body":"/usr/local/bin/log2timeline.py -p --vss-stores 1 srt.dump /media/usb1\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nplaso-1.3.1.post20151021\r\n\r\n\r\n\r\n^CError in atexit._run_exitfuncs:\r\nTraceback (most recent call last):\r\n  File \"/usr/lib/python2.7/atexit.py\", line 24, in _run_exitfuncs\r\n    func(*targs, **kargs)\r\n  File \"/usr/lib/python2.7/multiprocessing/util.py\", line 325, in _exit_function\r\n    p.join()\r\n  File \"/usr/lib/python2.7/multiprocessing/process.py\", line 145, in join\r\n    res = self._popen.wait(timeout)\r\n  File \"/usr/lib/python2.7/multiprocessing/forking.py\", line 154, in wait\r\n    return self.poll(0)\r\n  File \"/usr/lib/python2.7/multiprocessing/forking.py\", line 135, in poll\r\n    pid, sts = os.waitpid(self.pid, flag)\r\nKeyboardInterrupt\r\nError in sys.exitfunc:\r\nTraceback (most recent call last):\r\n  File \"/usr/lib/python2.7/atexit.py\", line 24, in _run_exitfuncs\r\n    func(*targs, **kargs)\r\n  File \"/usr/lib/python2.7/multiprocessing/util.py\", line 325, in _exit_function\r\n    p.join()\r\n  File \"/usr/lib/python2.7/multiprocessing/process.py\", line 145, in join\r\n    res = self._popen.wait(timeout)\r\n  File \"/usr/lib/python2.7/multiprocessing/forking.py\", line 154, in wait\r\n    return self.poll(0)\r\n  File \"/usr/lib/python2.7/multiprocessing/forking.py\", line 135, in poll\r\n    pid, sts = os.waitpid(self.pid, flag)\r\nKeyboardInterrupt\r\nException TypeError: \"'NoneType' object is not callable\" in <Finalize object, dead> ignored\r\nException TypeError: \"'NoneType' object is not callable\" in <Finalize object, dead> ignored\r\nException TypeError: \"'NoneType' object is not callable\" in <Finalize object, dead> ignored\r\nException TypeError: \"'NoneType' object is not callable\" in <Finalize object, dead> ignored\r\nException TypeError: \"'NoneType' object is not callable\" in <Finalize object, dead> ignored\r\nException TypeError: \"'NoneType' object is not callable\" in <Finalize object, dead> ignored\r\nException TypeError: \"'NoneType' object is not callable\" in <Finalize object, dead> ignored\r\nException TypeError: \"'NoneType' object is not callable\" in <Finalize object, dead> ignored\r\nException TypeError: \"'NoneType' object is not callable\" in <Finalize object, dead> ignored\r\nException TypeError: \"'NoneType' object is not callable\" in <Finalize object, dead> ignored\r\nException TypeError: \"'NoneType' object is not callable\" in <Finalize object, dead> ignored\\\r\n\r\n\r\nanalyst   4035  3335  0 Oct29 pts/19   00:00:57 /usr/bin/python /usr/local/bin/log2timeline.py -p --vss-stores 1 srt.dump /media/usb1\r\nanalyst   4045  4035  0 Oct29 pts/19   00:01:02 /usr/bin/python /usr/local/bin/log2timeline.py -p --vss-stores 1 srt.dump /media/usb1\r\nanalyst   4048  4035  0 Oct29 pts/19   00:00:39 /usr/bin/python /usr/local/bin/log2timeline.py -p --vss-stores 1 srt.dump /media/usb1\r\nanalyst   4051  4035  0 Oct29 pts/19   00:00:58 /usr/bin/python /usr/local/bin/log2timeline.py -p --vss-stores 1 srt.dump /media/usb1\r\nanalyst   4054  4035  0 Oct29 pts/19   00:00:41 /usr/bin/python /usr/local/bin/log2timeline.py -p --vss-stores 1 srt.dump /media/usb1\r\nanalyst   4060  4035  0 Oct29 pts/19   00:00:44 /usr/bin/python /usr/local/bin/log2timeline.py -p --vss-stores 1 srt.dump /media/usb1\r\nanalyst   4063  4035  0 Oct29 pts/19   00:00:40 /usr/bin/python /usr/local/bin/log2timeline.py -p --vss-stores 1 srt.dump /media/usb1\r\nanalyst   4066  4035  0 Oct29 pts/19   00:00:37 /usr/bin/python /usr/local/bin/log2timeline.py -p --vss-stores 1 srt.dump /media/usb1\r\nanalyst   4068  4035  0 Oct29 pts/19   00:00:40 /usr/bin/python /usr/local/bin/log2timeline.py -p --vss-stores 1 srt.dump /media/usb1\r\nanalyst   4070  4035  0 Oct29 pts/19   00:11:09 /usr/bin/python /usr/local/bin/log2timeline.py -p --vss-stores 1 srt.dump /media/usb1\r\nanalyst   4073  4035  0 Oct29 pts/19   00:00:37 /usr/bin/python /usr/local/bin/log2timeline.py -p --vss-stores 1 srt.dump /media/usb1\r\nanalyst   4076  4035  0 Oct29 pts/19   00:00:37 /usr/bin/python /usr/local/bin/log2timeline.py -p --vss-stores 1 srt.dump /media/usb1\r\nanalyst   4083  4035  1 Oct29 pts/19   00:14:40 [log2timeline.py] <defunct>\r\n\r\n"},"comment":{"url":"https://api.github.com/repos/log2timeline/plaso/issues/comments/158679928","html_url":"https://github.com/log2timeline/plaso/issues/399#issuecomment-158679928","issue_url":"https://api.github.com/repos/log2timeline/plaso/issues/399","id":158679928,"user":{"login":"butljon","id":7935650,"avatar_url":"https://avatars.githubusercontent.com/u/7935650?v=3","gravatar_id":"","url":"https://api.github.com/users/butljon","html_url":"https://github.com/butljon","followers_url":"https://api.github.com/users/butljon/followers","following_url":"https://api.github.com/users/butljon/following{/other_user}","gists_url":"https://api.github.com/users/butljon/gists{/gist_id}","starred_url":"https://api.github.com/users/butljon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/butljon/subscriptions","organizations_url":"https://api.github.com/users/butljon/orgs","repos_url":"https://api.github.com/users/butljon/repos","events_url":"https://api.github.com/users/butljon/events{/privacy}","received_events_url":"https://api.github.com/users/butljon/received_events","type":"User","site_admin":false},"created_at":"2015-11-21T20:48:51Z","updated_at":"2015-11-21T20:48:51Z","body":"thanks again for the tip ... and there I found it!  wrong in my program was that one needs to get all the stuff off the queue before joining the threads (otherwise threads may not be able to terminate):  http://stackoverflow.com/questions/31170788/python-multiprocessing-threads-dont-close-when-using-queue\r\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\nThis is most likely because of this documented quirk of multiprocessing.Queue:\r\n\r\nBear in mind that a process that has put items in a queue will wait before terminating until all the\r\nbuffered items are fed by the “feeder” thread to the underlying pipe. (The child process can call the\r\ncancel_join_thread() method of the queue to avoid this behaviour.)\r\n\r\nThis means that whenever you use a queue you need to make sure that all items which have been\r\nput on the queue will eventually be removed before the process is joined. Otherwise you cannot be\r\nsure that processes which have put items on the queue will terminate. Remember also that\r\nnon-daemonic processes will be joined automatically.\r\n\r\nBasically, you need to make sure you get() all the items from a Queue to guarantee that all the\r\nprocesses which put something into that Queue will be able to exit.\r\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}}