Python асинхронные циклы

Можете расписать как запускать циклы асинхронно? Не понимаю немного доки

Дано:

def mus():
    while True:
def dis(arg1, arg2):
    while True:

Хочу что бы они не останавливали друг друга тк один рисует текст, а другой принимает текст/нажатие кнопок/думает и работает с переменными которые улетают первому что бы он рисовал уже новые данные.


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Дизайн выглядит непродуманным, нужно больше подробностей как 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
...
→ Ссылка