Brian <br...@merrells.org> added the comment:

Jesse,

I am afraid my last post may have confused the issue.  As I mentioned in
my first post, the problem arises when JoinableQueue.put is preempted
between its two lines.  Perhaps the easiest way to illustrate this is to
exacerbate it by modifying JoinableQueue.put to force a preemption at
this inopportune time.

import time
def put(self, item, block=True, timeout=None):
    Queue.put(self, item, block, timeout)
    time.sleep(1)
    self._unfinished_tasks.release()

Almost any example will now fail.

from multiprocessing import JoinableQueue, Process

def printer(in_queue):
    while True:
        print in_queue.get()
        in_queue.task_done()

if __name__ == '__main__':
    jqueue = JoinableQueue()
    a = Process(target = printer, args=(jqueue,)).start()
    jqueue.put("blah")

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue4660>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to