Почему дочерние процессы не запускаются?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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Будут ли в многоуровневом планировщике очередей процессы с более высоким приоритетом вытеснять уже запущенные процессы с
    Anonymous » » в форуме Linux
    0 Ответы
    45 Просмотры
    Последнее сообщение Anonymous
  • Почему подключение очереди PHP-FPM, когда Max Active процессы меньше, чем общие процессы
    Anonymous » » в форуме Php
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Процессы Nodemanager и ResourceManager не запускаются
    Anonymous » » в форуме JAVA
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Убейте bash и его дочерние процессы
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Дочерние процессы Socat не завершаются после cisconnect клиента
    Anonymous » » в форуме Linux
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous

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