Проблема производителя-потребителя с использованием многопроцессорной обработки в PythonPython

Программы на Python
Ответить
Anonymous
 Проблема производителя-потребителя с использованием многопроцессорной обработки в Python

Сообщение Anonymous »

Я пытаюсь реализовать эту проблему, используя многопроцессорную обработку и канал в качестве стратегии связи между процессами, используя следующий метод:
Производитель использует счетчик pro_count для отслеживания количества элементов. в буфере. Когда производитель добавляет элемент в буфер, он увеличивает pro_count и уведомляет потребителя через выходной канал. Потребитель после потребления элемента уменьшает pro_count и информирует об этом производителя через notify_pipe. Если pro_count достигает размера буфера или превышает его, производитель должен дождаться, пока потребитель освободит пространство, потребляя элементы, прежде чем добавлять новые в буфер.
Потребитель использует счетчик con_count для отслеживания количество элементов в буфере. Когда производитель добавляет элемент в буфер, он увеличивает con_count и уведомляет потребителя через выходной канал. Потребитель потребляет элементы, уменьшает con_count и информирует производителя через notify_pipe. Если con_count достигает нуля, буфер пуст, и потребитель должен дождаться, пока производитель добавит элементы, прежде чем продолжить потребление.
когда производитель ожидает из-за полного буфера, а потребитель ожидание из-за пустого буфера, оно должно не только отображаться в терминале, но и фактически ждать в системе.
эта программа также должна отображать три условия.
Одним из них является то, что производитель и потребитель работают одновременно, и это можно реализовать с помощью сна. раз (например, оба должны быть 1).
другое условие состоит в том, что фактически происходит полный буфер, и производитель ждет, пока будет реализовано то, что время ожидания производителя будет слишком большим. меньше, чем время сна потребителя (время сна производителя: 0,01, время сна потребителя: 1)
и другое условие заключается в том, что фактически должен произойти пустой буфер, что, я полагаю, может быть похоже на это: (время сна производителя: 1, время сна потребителя: 0.01).
Я написал следующий код, но проблема в том, что он не работает и ничего не показывает в терминале. Я думаю, что моя логика верна, и я много искал, в чем проблема, но так и не смог ее исправить. код:
'''

Код: Выделить всё

from multiprocessing import Process, Pipe, Lock, Condition
import time
import random

# Define buffer size and shared buffer
buffer_size = 30
buffer = []

def create_items(pipe_1, notify_pipe, lock, condition):

output_pipe = pipe_1[1]
notify_conn = notify_pipe[0]
pro_counter = 0

for _ in range(100):
item = random.randint(0, 1000)

# Producer waits if buffer is full
with condition:
while pro_counter >= buffer_size:  # Wait until there's space in the buffer
print("Producer waiting: Buffer full.")
condition.wait()  # Wait for consumer to consume an item

#Add the item to the buffer
with lock:
buffer.append(item)
pro_counter += 1
print(f"Producer: Producing {item}")
output_pipe.send("produced")  # Notify consumer an item was produced

# Notify consumer that an item was produced
#condition.notify_all()

# Process acknowledgments from the consumer
while notify_conn.poll():
ack = notify_conn.recv()
if ack == "consumed":
pro_counter -= 1

time.sleep(0.01)  # Simulate some delay

# Signal the consumer that production is complete
output_pipe.send(None)
output_pipe.close()

def consume_items(pipe_1, notify_pipe, lock, condition):

input_pipe = pipe_1[0]
notify_conn = notify_pipe[1]
con_counter = 0

while True:

ack = input_pipe.recv()
if ack == "produced":
con_counter += 1

with condition:
while con_counter 

Подробнее здесь: [url]https://stackoverflow.com/questions/79326360/producer-consumer-problem-using-multiprocessing-in-python[/url]
Ответить

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

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

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

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

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