Я пытаюсь создать простую многопроцессорную программу, которая фиксирует значение X за определенное время, пропуская значение, которое не во время чтения. Это код:Python, читающий несколько значений при многопроцессорной обработке
from multiprocessing import Process, Pipe
from time import sleep
def f(conn):
x=0
for i in xrange(0,20):
x+=1
sleep(0.1)
conn.send(x)
conn.close()
if __name__ == '__main__':
parent_conn, child_conn = Pipe()
p = Process(target=f, args=(child_conn,))
p.start()
for i in xrange(0,5):
print parent_conn.recv()
sleep(0.4)
p.join()
Грубо говоря, то, что я ожидаю от кода выше это:
>>>
4
8
16
20
, но вместо этого, IDLE дал мне этот выход:
>>>
1
2
3
4
5
И так далее, пока не достигнет 20. Есть ли команда сброса буфера? или подобная вещь?
заблаговременно.
поэтому, я должен использовать poll() для очистки трубы. но как это возможно? когда опрос() станет ложным? я имею в виду, что это должно быть в конце 20 правильно? или я что-то пропустил? это работает очевидно, но я просто озадачил, как это работает. спасибо – aji
@aji 'poll' проверяет, есть ли в трубе элементы, которые могут быть получены, поэтому вы можете понять это как' has_elements'. Если 'poll' становится ложным, вы останавливаете цикл while. Опорожнение трубы выполняется повторением «recv». – hansaplast