Понимание os.fork и Queue.Queue

я захотел реализовать простую программу на питоне с использованием параллельного выполнения. Это связано с вводом-выводом, поэтому я решил, что потоки будут подходящими (в отличие от процессов). Прочитав документацию по Queue и fork, я подумал, что может работать что-то вроде следующего.

q = Queue.Queue()

if os.fork():            # child
    while True:
        print q.get()
else:                    # parent
    [q.put(x) for x in range(10)]

Однако вызов get() никогда не возвращается. Я думал, что он вернется, как только другой поток выполнит вызов put().При использовании модуля threading все работает примерно так, как я ожидал:

q = Queue.Queue()

def consume(q):
    while True:
        print q.get()

worker = threading.Thread (target=consume, args=(q,))
worker.start()

[q.put(x) for x in range(10)]

Я просто не понимаю, почему метод fork не делает того же. Что я упускаю?

6
задан Brian Hawkins 29 March 2012 в 20:42
поделиться