Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 1
Регистрация: 12.04.2015
Сообщений: 21

Переопределение run() в классе, наследованном от threading.Thread (Producer-Consumer pattern)

12.12.2019, 16:53. Показов 2556. Ответов 0

Студворк — интернет-сервис помощи студентам
День добрый!
Помогите разобраться с наследованием от класса Thread.
Для решения определенной задачи пытаюсь реализовать паттерн Producer-Consumer по образцу:
https://www.bogotobogo.com/pyt... _Queue.php

В идеале работать должно так:
1. Формируется большая очередь1, в которую помещаются входные данные
2. Producer берет из этой очереди объект, который должен быть передан в качестве аргумента target-функции этого потока, после чего возвращенное ей значение помещается в промежуточную очередь2
3. Consumer'ы берут из очереди2 объекты и передают их в качестве аргументов target-функции.

У меня это выглядит примерно так:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import threading
import queue
from collections import deque
 
def getpages(): #Получаем данные
    with open(file,'r') as mfile:
        return [(URL % REQ) % int(line.strip()) for line in mfile]
def foo1(data):
   #Код
    return processed_data
 
def foo2(item):
      #Код
 
#Создаём очереди
q1=queue.Queue()
q1.queue=deque(getpages('members.csv'))
BUF_SIZE = 40
q2 = queue.Queue(BUF_SIZE)
 
#Паттерн
class ProducerThread(threading.Thread):
    def __init__(self, group=None, target=None, name = None, args=(), kwargs=None, verbose=None):
        super(ProducerThread,self).__init__()
        self.target = target
        self.name = name
 
    def run(self):
        while not q1.empty():
            if not q2.full():
                item = q1.get()
                #нечто
                q2.put(#результат работы foo1)
        return
 
class ConsumerThread(threading.Thread):
    def __init__(self, group=None, target=None, name = None, args=(), kwargs=None, verbose=None):
        super(ConsumerThread,self).__init__()
        self.target = target
        self.name = name
        return
 
    def run(self):
        while True:
            if not q2.empty():
                item=q2.get()
               #target=foo2(item), как-то так
            elif q1.empty():
                break
        return
#
#
#остальной код
#
#
if __name__ == "__main__":
    producers=[]
    for i in range(10):
        producer=ProducerThread(name = 'Producer '+ str(i), target=foo1)
        producers.append(producer)
        producer.start()
    consumers=[]
    for i in range(100):
        consumer=ConsumerThread(name = 'Consumer ' +str(i),target=foo2)
        consumers.append(consumer)
        consumer.start()
    for p in producers:
        p.join()
    for c in consumers:
        c.join()
Подскажите пожалуйста, как правильно переделать run() в ProducerThread и ConsumerThread, чтобы они помещали данные из очередей в target-функции foo1 и foo2.
И есть ли возможность получить возвращаемые target-функцией значения внутри класса-потока?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.12.2019, 16:53
Ответы с готовыми решениями:

Многопоточное чтение из файла используя Producer/Consumer pattern
В общем задача огромный файл считать и сделать вычисления с входными данными. Решил прибегнуть к помощи паттерна Producer/Consumer ...

Как в классе Thread реализован вызов run(), если метод run() определён в АВТОРСКОМ классе?
И, следовательно, в классе Thread ничего не известно о вызове run? То есть, ребята, мне пришла в голову мысль. Коль скоро самый...

Consumer-Producer на семафорах
Всем добрый день. Есть программа #include <windows.h> #include <stdio.h> #include "iostream" using namespace std; int Sklad = 0; ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.12.2019, 16:53
Помогаю со студенческими работами здесь

Классическая задача producer\consumer
Базовая задачка по потокам\семафорам. Поставщиц потребитель. Помогите вынести Buffer как отдельный класс. Чтобы он отвечал за переменную...

Подскажите по потокам, не могу разобраться с producer/consumer
Всех приветствую, подскажите , не могу понять как всетаки правильно имплементировать producer/consumer, подскажите по русски как нужно с...

Синхронизация потоков через Event-ы (задача producer/consumer)
Задание :Реализуйте синхронизацию для простейшего случая задачи producer/consumer (spsc – single producer single consumer). Я уже...

Threads Потоки синхронизация, один producer два consumer`a и очередь
Привет. Только начал в шарпы, не говоря уже про потоки и мне тут такую задачку дали Итак дано: один produser два consumer`a. ...

Реализовать следующие варианты примера "Producer/Consumer"
Может кто сталкивался,если не затруднит,помогите пожалуйста 1) без синхронизации 2) с помощью ключевого слова synchronized 3) с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В качестве. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru