Как сделать два действия, чтобы они выполнялись параллельно и могло закончиться только одно?

Dimitrius

Новичок
Пользователь
Ноя 28, 2022
3
0
1
Ну вот нужно сделать действие на время. Например, ввести какой-то текст за время
если просто ввести код так:
while k!=vremya and a="":
time.sleep(1)
k=k+1
a=input()
То цикл остановится и будет ждать, пока пользователь не напишет
А нужно, чтобы параллельно и одно от другого не зависело
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 589
459
83
потоки
 

Dimitrius

Новичок
Пользователь
Ноя 28, 2022
3
0
1
А можно коротко и понятно новичку?
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 589
459
83
 

Malenkey

Пользователь
Пользователь
Ноя 3, 2022
140
11
18
Можешь еще так попробовать. Без потоков.
Python:
from pynput import keyboard
from threading import Timer
import sys


text = ''
sec = 5 # Время в секундах


def stop():
    listener.stop()
    print('За ' + str(sec) + ' сек Вы успели ввести: ' + text)
    sys.exit()


def on_key_press(key):
    global text
    if 'Key.' not in str(key) or 'Key.space' in str(key):
        if str(key) == 'Key.space':
            text = text + ' '
        else:
            text = text + str(key)
            text = text.replace("'", "")


with keyboard.Listener(on_press = on_key_press) as listener:
    Timer(sec, stop).start() # Включение таймера
    listener.join()

Только сперва выполни в "CMD"
pip install pynput
если у тебя этого модуля нет.

Проблема тут только в том, что метод "keyboard" отслеживает нажатие ЛЮБОЙ кнопки и, например, при нажатии пробела он возвращает значение "Key.space". Поэтому надо фильтровать ввод. А еще, если половину текста ввести русскими буквами, а под конец переключиться на английскую раскладку, весь оставшийся текст все равно будет перехвачен в русских буквах.
 
Последнее редактирование:

programmer007

Новичок
Пользователь
Ноя 30, 2022
9
0
1
Вы можете использовать асинхронный ввод-вывод с модулем asynciok, это поможет вам настроить многопоточность и реализовать параллельные вычисления.
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 589
459
83
Вы можете использовать асинхронный ввод-вывод с модулем asynciok, это поможет вам настроить многопоточность и реализовать параллельные вычисления.
асинцио не многопоточность, не надо вводить людей в заблуждение...
 

Форум IT Специалистов