Возвращаемое значение от потока

Существует Konfabulator Yahoo для рабочего стола окон.

56
задан Mateusz Piotrowski 18 April 2016 в 15:22
поделиться

4 ответа

Я предлагаю вам создать экземпляр Queue.Queue перед запуском цепочки, и передать его как один из аргументов потока: перед тем, как поток завершится, он . поместит результат в очередь, которую он получил в качестве аргумента. Родитель может .get или .get_nowait по желанию.

Очереди, как правило, являются лучшим способом организовать синхронизацию потоков и обмен данными в Python: они изначально ориентированы на потоки, средства передачи сообщений - лучший способ организовать многозадачность в целом! -)

59
ответ дан 26 November 2019 в 17:19
поделиться

Другой подход - передать потоку функцию обратного вызова. Это дает простой, безопасный и гибкий способ вернуть значение родительскому элементу в любое время из нового потока.

# A sample implementation

import threading
import time

class MyThread(threading.Thread):
    def __init__(self, cb):
        threading.Thread.__init__(self)
        self.callback = cb

    def run(self):
        for i in range(10):
            self.callback(i)
            time.sleep(1)


# test

import sys

def count(x):
    print x
    sys.stdout.flush()

t = MyThread(count)
t.start()
5
ответ дан 26 November 2019 в 17:19
поделиться

Что ж, в модуле потоковой передачи Python есть объекты состояния, связанные с блокировками. Один метод Acquire () вернет любое значение, возвращаемое базовым методом. Для получения дополнительной информации: Объекты условий Python

1
ответ дан 26 November 2019 в 17:19
поделиться

Если вы вызывали join (), чтобы дождаться завершения потока, вы могли бы просто прикрепить результат к самому экземпляру потока, а затем получить его из основного потока после того, как join () вернется .

С другой стороны, вы не говорите нам, как вы собираетесь обнаружить, что поток завершен и что результат доступен. Если у вас уже есть способ сделать это, он, вероятно, укажет вам (и нам, если вы сообщите нам) лучший способ получения результатов.

12
ответ дан 26 November 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: