Надеюсь, это довольно простой вопрос для ответа. Я пытаюсь постоянно отправлять массив данных в рабочий процесс во время выполнения моей программы. Проблема в том, что когда я пытаюсь присоединиться к потоку, программа просто зависает.Подпроцесс Python, подвешенный после присоединения
Я думал, что, возможно, рабочий закончил, и мне не нужно было join
, однако, когда я удаляю вызов join
, моя программа зависает в конце.
Вот фрагмент моего кода. Я пытаюсь обойти крупные операции травления с помощью рабочего таким образом, так как раньше я сталкивался с проблемами надстройки с объектом Queue.
# Outside of the class definition if that matters here...
def RunTimeWorker(conn, timestep, total_timesteps):
print "Start worker", timestep, total_timesteps
while (timestep < total_timesteps):
data = conn.recv()
timestep = data[0]
print timestep, "DATA [" + str(data)
conn.close()
print "End worker"
И методы класса, назвав его:
def Execute(self):
parent_conn, child_conn = Pipe()
p = Process(target=RunTimeTestingWorker,args=(child_conn,0,300))
p.start()
for timestep in xrange(300):
...
# Send required data over to worker
toProcessArr = [timestep,300,
# trace data
...,...]
parent_conn.send(toProcessArr)
...
p.join # program hangs here
#p.join -- program will hang at end if join is commented
Вот мой временный шаг успешно обновляя ...
Start worker 0 300
0 DATA [[0, 300, ...]
1 DATA [[1, 300, ...]
2 DATA [[2, 300, ...]
...
299 DATA [[299, 300, ...] # max timesteps are 300
Редактировать
Как верно заметил Давид, это была глупая ошибка с моей стороны. Тем не менее, его комментарий относительно добавления часового очень ценен.
Может быть, я не понимаю, но стандартный вывод/STDERR не следует учитывать здесь. Я просто хочу передать некоторые данные в подпроцесс. – espais
@Lattyware Я думаю, что вы можете ввести в заблуждение «многопроцессорство» с 'subprocess'? –
Я пытался следовать примеру [Пример трубы] (https://docs.python.org/2/library/multiprocessing.html#exchanging-objects-between-processes) – espais