Python асинхронные циклы
Можете расписать как запускать циклы асинхронно? Не понимаю немного доки
Дано:
def mus():
while True:
def dis(arg1, arg2):
while True:
Хочу что бы они не останавливали друг друга тк один рисует текст, а другой принимает текст/нажатие кнопок/думает и работает с переменными которые улетают первому что бы он рисовал уже новые данные.
Ответы (1 шт):
Дизайн выглядит непродуманным, нужно больше подробностей как dis будет получать обновления. Сейчас он получает аргументы на старте и нигде не сказано, как они могут меняться.
Ниже код который запустит mus и dis параллельно. Основная техника: насоздавать нитей, запустить их, ждать их окончания. В нашем примере они не кончаются, но ждать надо - программа завершается когда завершается основная нить. Пример мог бы быть проще: две нити - излишество, можно было обойтись одной. Да я хочу показать технику вообще, кроме того хорошая практика не занимать основную нить - позже для неё обязательно найдется "работа по дому":
import threading
import time
def mus():
while True:
print('mus')
time.sleep(0.9)
def dis(arg1, arg2):
while True:
print('dis({}, {})'.format(repr(arg1), repr(arg2)))
time.sleep(1.5)
def test(arg1, arg2):
threads = (
threading.Thread(target=mus),
threading.Thread(target=dis, args=(arg1, arg2))
)
for t in threads:
t.start()
print('started')
for t in threads:
t.join()
test('arg1', 'arg2')
Заметьте где печатается started. Добро пожаловать в мир параллельного программирования:
mus dis('arg1', 'arg2') started mus dis('arg1', 'arg2') mus mus dis('arg1', 'arg2') mus dis('arg1', 'arg2') mus mus dis('arg1', 'arg2') mus mus dis('arg1', 'arg2') mus dis('arg1', 'arg2') mus ...