Python 3.4, я пытаюсь создать сервер, используя модуль websockets (ранее я использовал обычные сокеты, но хотел сделать javascript-клиент), когда столкнулся с проблемой (потому что он ожидает async, по крайней мере, если примеры должны быть доверенными, которые я раньше не использовал). Threading просто не работает. Если я запустил следующий код, панель никогда не будет напечатана, тогда как если бы я прокомментировал строку с номером yield from
, она работает так, как ожидалось. Таким образом, доходность, вероятно, делает то, что я не совсем понимаю, но почему это никогда не выполняется? Должен ли я установить python 3.5?Ничья Python никогда не запускается, если run() содержит выход из
import threading
class SampleThread(threading.Thread):
def __init__(self):
super(SampleThread, self).__init__()
print("foo")
def run(self):
print("bar")
yield from var2
thread = SampleThread()
thread.start()
вы не можете использовать 'yield' из подпрограммы запуска, которая должна зацикливаться навсегда/что-то делать, а не возвращать/давать что-то. –
мой главный вопрос был, почему? Но похоже, что ответ кроется в том, что выход автоматически превращает всю функцию в создателя генератора, если можно так выразиться. Но как я могу использовать asyncio вместе с threading, или это глупо это делать? У меня изначально был поток для каждого клиента, чтобы узнать, есть ли у них что-нибудь, чтобы получить, но могу ли я просто превратить их в обычные объекты, если я использую async? – fdagpigj
Да, это глупость в 99% случаях. Обычно программа async должна иметь одиночный цикл событий в основном потоке + пуле потоков, доступном для 'loop.run_in_executor()'. Но если вам это действительно нужно - запустите новый цикл событий в вашем потоке. –