Stdscr перекрывается и смешивает вывод в последовательной очередиPython

Программы на Python
Ответить
Anonymous
 Stdscr перекрывается и смешивает вывод в последовательной очереди

Сообщение Anonymous »

Код: Выделить всё

FRAME_INTERVAL = 0.01 # seconds
display_queue = asyncio.Queue()
async def display(display_queue, stdscr):
curses.curs_set(0)
curses.start_color()
curses.use_default_colors()
curses.init_pair(1, curses.COLOR_RED, -1)
curses.init_pair(2, curses.COLOR_GREEN, -1)
last = time.monotonic()
while True:
try:
item = await display_queue.get()
while not display_queue.empty():
item = await display_queue.get()
now = time.monotonic()
to_wait = last + FRAME_INTERVAL - now
if to_wait > 0:
await asyncio.sleep(to_wait)
if item is not None:

stdscr.clear()
stdscr.addstr(0, 0, 'Q')
stdscr.refresh()

last = time.monotonic()
except Exception as e:
pass

# initialized in async main:
display_coro = display(display_queue, stdscr)
await asyncio.gather(worker_coro, display_coro)
Это код, который отображает символ «Q». Проблема в том, что у меня есть только одна сопрограмма, которая отправляет данные в очередь для отображения, но время от времени я вижу дублирующийся вывод. Я могу предоставить дополнительную информацию.

Как решить эту проблему?
Большинство кадров:
Изображение

Но это тоже появляется:
Изображение

И даже этот:
Изображение


Подробнее здесь: https://stackoverflow.com/questions/798 ... rial-queue
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»