Как из функции Python вытащить переменную?

Есть функция из которой нужно вытащить одну переменную. return нельзя использовать так как используется threading который не возвращает то что возвращает функция. Нужно получить переменную data из функции read_sok как глобальную чтоб к ней можно было обратиться.
def messageShow(message, alias):
    def read_sok():
        while 1:
            data = sor.recv(1024)
            data = data.decode("utf-8")
            data_list = data.split()
            if data_list[1] != alias:
                print(data)
            time.sleep(1)

    server = '192.168.1.11', 9090  # Данные сервера
    # Вводим наш псевдоним
    sor = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sor.bind(('', 0))  # Задаем сокет как клиент
    sor.sendto((alias + ' Connect to server').encode('utf-8'), server)  # Уведомляем сервер о подключении
    potok = threading.Thread(target=read_sok)
    potok.start()
    while 1:
        sor.sendto(('[' + alias + '] ' + message).encode('utf-8'), server)
        break
  • Вопрос задан
  • 784 просмотра
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 3
@Karpion
Записать значение этой переменной в глобальную переменную.
Ответ написан
@fantik22
from threading import Thread

def foo(bar):
    return bar

class ThreadWithReturnValue(Thread):
    def __init__(self, group=None, target=None, name=None,
                 args=(), kwargs={}, Verbose=None):
        Thread.__init__(self, group, target, name, args, kwargs)
        self._return = None
    def run(self):
        print(type(self._target))
        if self._target is not None:
            self._return = self._target(*self._args,
                                                **self._kwargs)
    def join(self, *args):
        Thread.join(self, *args)
        return self._return
twrv = ThreadWithReturnValue(target=foo, args=('Hello, world!',))

twrv.start()
print(twrv.join())   # prints Hello, world!

Взято отсюда
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
deeplay Новосибирск
от 130 000 ₽
от 130 000 ₽
Enjoy PRO Санкт-Петербург
от 140 000 до 180 000 ₽
24 окт. 2020, в 22:43
3000 руб./за проект
24 окт. 2020, в 22:27
2500 руб./за проект