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

Разделение данных от двух потоков

18.03.2019, 13:35. Показов 2623. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте) Я новичок в python. Есть задача - имеется два потока, которые выдают данные на разных частотах. Как разделить эти данные в те моменты времени когда они приходят одновременно?

код исполняемого скрипта:
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
import myThread
from time import ctime, sleep
from threading import Thread
 
def dg():
        sleep(0.5)
        dx = 111.156
        dy = 111.415
        return dx, dy
 
def bg():
        sleep(2)
        df = 222.678
        dl = 222.945
        dK = 222.271
        return df, dl, dK
 
funcs = [dg, bg]
t1 = myThread.MyThread(funcs[0],funcs[0].__name__)
t2 = myThread.MyThread(funcs[1],funcs[1].__name__)
 
if __name__ == '__main__':
    
    t1.start(), t2.start()
    t1.join(), t2.join()
Код для myThread:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import threading
from time import ctime
 
class MyThread(threading.Thread):
    
    def __init__(self,func,name=''):
        threading.Thread.__init__(self)
        self.name = name
        self.func = func
     
    def getResult(self):
        return self.func()
        
    def run(self):
        while 1:              
            self.res = self.func()
            print(self.res)
Проблема в том, что когда результаты из функций dg, bg приходят одновременно, то переменная self.res выдает сразу два значения, которые не разделить, а мне их нужно разделять для последующей обработки. Подскажите как это можно сделать на python. Заранее спасибо!)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.03.2019, 13:35
Ответы с готовыми решениями:

Запись данных из двух отдельных потоков в один файл
Как реализовать запись данных из двух отдельных потоков в один файл? Мне кажется что проще с использовать WinAPI, но не имею представления...

Разделение потоков
Здравствуйте. Прошу подсказки При падении программы получаю: Choreographer: Skipped 111 frames! The application may be doing too...

разделение потоков
Здравствуйте, у меня задача создать четыре раздельных потока, которые меняют два произвольных символа в строке местами с интервалом в 1сек...

10
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
18.03.2019, 14:06
Непонятно, что значит "не разделить". Определить, из какого потока пришло? Так передавайте вместе со значением id потока.
0
0 / 0 / 0
Регистрация: 18.03.2019
Сообщений: 4
18.03.2019, 14:13  [ТС]
Например, данные пришли одновременно.
Тогда возвращаемое значение будет таким:
self.res = [dx,dy][df,dl,dK]
Если обратиться к self.res[0], то получу результат: [dx][df]
А как получить две разные переменные, такие чтобы a = dx, b = df ?? Вот это не получается
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
18.03.2019, 14:27
Андрей2991,
Python
1
2
a = self.res[0][0]
b = self.res[0][1]
так не пробовали?
1
0 / 0 / 0
Регистрация: 18.03.2019
Сообщений: 4
18.03.2019, 14:59  [ТС]
В этом случае появляется ошибка : 'float' object is not subscriptable
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
18.03.2019, 16:08
Цитата Сообщение от Андрей2991 Посмотреть сообщение
Тогда возвращаемое значение будет таким:
self.res = [dx,dy][df,dl,dK]
Всё равно не понимаю.
self.res у вас вообще внутри потока, другой поток тут не влияет никаким образом.

Добавлено через 4 минуты
Андрей2991, да, кстати, ускользнуло от внимания - а почему в объект Thread (parent) вы не передаёте вашу функцию? Параметр target. Непорядок. Без него вообще работать ничего не будет.
0
0 / 0 / 0
Регистрация: 18.03.2019
Сообщений: 4
26.03.2019, 13:49  [ТС]
Согласен, не влияет) два независимых потока - dg и bg, а функция self.res возвращает данные от этих потоков. Вопрос остается открытым) как эти данные читать отдельно друг от друга?) ведь функция self.res выкидывает сразу все что она видит в потоках.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
26.03.2019, 14:45
Цитата Сообщение от Андрей2991 Посмотреть сообщение
функция self.res выкидывает сразу все что она видит в потоках.
Где так?
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<MyThread(dg, started 6872)>
(111.156, 111.415)
<MyThread(dg, started 6872)>
(222.678, 222.945, 222.271)
(111.156, 111.415)
<MyThread(bg, started 6640)>
<MyThread(dg, started 6872)>
(111.156, 111.415)
<MyThread(dg, started 6872)>
(111.156, 111.415)
<MyThread(dg, started 6872)>
(111.156, 111.415)
<MyThread(dg, started 6872)>
(222.678, 222.945, 222.271)
<MyThread(bg, started 6640)>
(111.156, 111.415)
<MyThread(dg, started 6872)>
(111.156, 111.415)
<MyThread(dg, started 6872)>
(111.156, 111.415)
<MyThread(dg, started 6872)>
А вообще существуют очереди, примитивы синхронизации и т.д. Но на вашей игрушечной постановке задачи непонятно а зачем тут вообще потоки...
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
26.03.2019, 15:18
Цитата Сообщение от Андрей2991 Посмотреть сообщение
функция self.res возвращает данные от этих потоков. Вопрос остается открытым)
Как я уже сказал, с точки зрения написанного кода, т. е. "что имели в виду", self.res живёт внутри потока. Одного потока. Другой тут никак не влияет.
С точки зрения технической, функции dg и bg у вас вообще не работают в отдельных потоках, т. к. не переданы, как параметр target, в конструктор родителя. Вопрос останется открытым ) до тех пор, пока не начнёте обдумывать, что вам ответили.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
26.03.2019, 15:22
dondublon,
Цитата Сообщение от dondublon Посмотреть сообщение
функции dg и bg у вас вообще не работают в отдельных потоках
Да не, тут как раз все работает. Пример запуска его кода в моем посте. Я туда вставил threading.current_thread().
Ему target не нужен - тут же через переопределение исходного конструктора все создается - там только run нужен.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
26.03.2019, 15:31
Garry Galler, точно, работают. Прошу прощения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.03.2019, 15:31
Помогаю со студенческими работами здесь

Разделение потоков
Нужно в главном потоке запустить 3 потока,дождаться их завершения,потом запустить ещё 3 и тоже дождаться их завершения,однако на деле идёт...

Разделение потоков выполнения
Как можно сделать, что бы пока выполняется один код программы например большой for, то программа не зависала?

Разделение потоков Skype и twitch.tv
Здравствуйте.Я стримлю на твиче (twitch.tv) и общаюсь с друзьями по скайпу. Соответственно голоса друзей идут на трансляцию. Можно ли это...

При помощи двух потоков реализовать вращение двух палочек по экрану с различной скоростью
D главном окне должны быть созданы две кнопки Start и Stop. Нажатие кнопки Start запускает указанные в задании потоки. Нажатие кнопки Stop...

Работа с сетью, работа с БД и парсинг информации. Разделение потоков
Возникла проблема разграничения потоков. То есть в конечном файле реализованы алгоритмы: работа с сетью, работа с БД и парсинг информации....


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru