Skip to content
This repository has been archived by the owner on Mar 29, 2020. It is now read-only.

Сделать асинхронный printLine #75

Open
zuevval opened this issue Mar 30, 2019 · 2 comments
Open

Сделать асинхронный printLine #75

zuevval opened this issue Mar 30, 2019 · 2 comments
Assignees
Labels
bug Something isn't working python coding in Python

Comments

@zuevval
Copy link
Owner

zuevval commented Mar 30, 2019

Предлагаю абстрагироваться от конкретного применения и решить задачу.
Дан код:

import threading
import time

def f(k=1):
    print(k)
    time.sleep(5)
    print(k)
    time.sleep(5)
    print(k)

def fAsyncBad(k):
    t = threading.Thread(target=f, args=(k,))
    t.start()

fAsyncBad(1)
time.sleep(0.5)
fAsyncBad(2)
time.sleep(0.5)
fAsyncBad(3)
time.sleep(0.5)
fAsyncBad(4)

Сейчас этот код выведет 1 2 3 4 1 2 3 4 1 2 3 4. Нужно как-то добиться того, чтобы выводить 1 2 3 4 4 4, т. е. завершать выполнение f по новому вызову. Можно изменять саму f (временные интервалы должны остаться). После вызова f основной поток не должен виснуть, т. е. нельзя запускать синхронную задержку.

@zuevval zuevval added bug Something isn't working python coding in Python labels Mar 30, 2019
@slmtnm
Copy link
Collaborator

slmtnm commented Mar 31, 2019

test.py.zip

@zuevval
Copy link
Owner Author

zuevval commented Apr 15, 2019

issue выполнен, но задача не совсем решена. Serial не thread-safe, его нельзя делить между потоками. В текущем состоянии ветки experimental поставлен костыль: работает синхронный код отправки в Serial строки из нулей и единиц; после этого две секунды Питон спит (если спать меньше 1.7, по той или иной причине Arduino прерывает вывод), передаёт управление в listenJoystick с флагом, означающим, что по приходу + (выведена буква) тоже надо передать управление обратно в printLine (а не только по приходу l d u r и прочих). Если listenJoystick возвращает не +, printLine завершает работу

Это, видимо, также проблема arduino, так что Макару не обязательно вникать... но инициатива приветствуется.

@aalksii aalksii mentioned this issue Apr 21, 2019
4 tasks
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Something isn't working python coding in Python
Projects
None yet
Development

No branches or pull requests

2 participants