Почему дочерние процессы не запускаются?Python

Программы на Python
Anonymous
Почему дочерние процессы не запускаются?

Сообщение Anonymous »

Ниже приведен сценарий, отражающий критическую часть более крупного приложения. Схема такова:
  • Я получаю данные из API, который здесь моделируется путем перебора массива целых чисел.
  • Код запускает данные, поступающие из API, посредством длинного (почти) вычисления, которое здесь моделируется с помощью Process_the_data.
  • После этого выходные данные записываются в файл база данных здесь смоделирована как write_to_sql.
Мне нужно ускорить прием, поэтому я пытаюсь распараллелить вызовыprocess_the_data что является самым большим узким местом. Цель состоит в том, чтобы три дочерних процесса записывали свои результаты в одну очередь для записи в базу данных.
Я получаю две основные ошибки: EOFError , Сломанная труба. Но после написания этой упрощенной версии я думаю, что что-то неправильно понял в модуле multiprocessing и/или классе Queue, потому что выходной_q никогда не записывается.
import multiprocessing
import random
import time

def process_the_data(in_q, out_q):
while True:
data = in_q.get(block=True)
time.sleep(random.choice([1,2,3]))
out_q.put_nowait(data + 1)

def write_to_sql(n):
print(n)

multiprocessing.set_start_method('fork')
mgr = multiprocessing.Manager()
input_q = mgr.Queue(maxsize=5)
output_q = mgr.Queue()

input_data = range(100)

p1 = multiprocessing.Process(target=process_the_data, args=(input_q, output_q))
p2 = multiprocessing.Process(target=process_the_data, args=(input_q, output_q))
p3 = multiprocessing.Process(target=process_the_data, args=(input_q, output_q))

p1.start()
p2.start()
p3.start()

for n in input_data:
# realized this loop is wrong but doesn’t change the behavior
while not input_q.full():
input_q.put(n)

while not output_q.empty():
write_to_sql(output_q.get(block=False))

p1.join()
p2.join()
p3.join()

print('finished')


Подробнее здесь: https://stackoverflow.com/questions/785 ... ot-running

Вернуться в «Python»