Попробуйте заснуть прямо за подпиской. Это похоже на асинхронный вызов, и ваша функция обратного вызова, вероятно, срабатывает после того, как вы напечатаете результаты.
Вы уверены, что ваш сон находится в правильной строке?
Редактировать:
Возможно, вам следует просто использовать класс queue.Queue. Я надеюсь, что это решит вашу проблему. Вы можете использовать Очередь просто как обычный список. Например:
from concurrent.futures import ThreadPoolExecutor
from queue import Queue
from time import sleep
def write_in_Queue(some_message, seconds):
print("Wait {} seconds".format(seconds))
sleep(seconds)
queue.put(some_message)
print('message put into Queue')
if __name__ == "__main__":
queue = Queue()
threadpool = ThreadPoolExecutor()
threadpool.submit(write_in_Queue, "Hallo", 2)
threadpool.submit(write_in_Queue, "End", 4)
print("Waiting for first message")
message_1 = queue.get()
print("Wait for second message")
message_2 = queue.get()
print(message_2)
print("Finish this thread")
Вы получите вывод:
Wait 2 seconds
Wait 4 seconds
Waiting for first message
message put into Queue
Wait for second message
message put into Queue
End
Finish this thread
queue.get позаботится о том, чтобы вы подождали, пока что-то будет записано в очередь. Я пытался решить эту проблему с помощью библиотеки Asyncio, но не смог найти решение, чтобы получить эту работу так быстро.
Вы просто пишете свои сообщения в очередь. Надеюсь, это поможет.