Передача данных в активный поток python

У меня есть поток, который раз в секунду стирает и отрисовывает карту консольной игры. displayThread = Thread(target=display); displayThread.start(). Функция display отвечает за отрисовку раз в секунду. Как передать в этот поток координаты игрока(они так же раз в секунду обновляются и находятся в обычном while True вне потока)


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

Автор решения: Daniil Loban

В принципе нет никаких проблем в передаче координат, если передавать аргумент по ссылке (объект), в общем случае это может выглядеть примерно так:

from threading import Thread,Event   
from threading import Event
from time import sleep

class Coord:
    x = 0
    y = 0

def display(event, coord):
    while(True):
        sleep(1)
        if (event.is_set()): break
        print(coord.x, coord.y)

def run():
    event = Event()
    coord = Coord()     
    displayThread = Thread(target=display, args=(event, coord))
    displayThread.start()
    i = 0
    while(True):
        i += 1
        coord.x += 1  # меняем координаты 
        coord.y -= 1
        if (i == 10**7): break 

    event.set()
    displayThread.join()    

if __name__ == '__main__':
    run()

Вывод примерно такой:

2205426 -2205426
4495946 -4495946
6806295 -6806295
9196226 -9196226
→ Ссылка