Как передать переменные между живыми / работающими скриптами? - PullRequest
1 голос
/ 16 марта 2020

Я пытаюсь создать игру, в которой одновременно запускаются два сценария.

Например, один сценарий принимает входные данные пользователя и другие переменные, а другой обновляет экран, управляет объектами, и выполняет все необходимые задачи.

Мне нужно иметь возможность передавать переменные между сценариями и обратно во время их работы.

Вот пример моего кода:

main.py

#main
Num = 0
while True:
  if (#/up key is pressed/#):
    Num=1

control.py

#control script
while True:
  if main.Num==1:
     main.Num=0
     Move_object()

Я пытался сохранить данные в файл, а затем прочитать данные из другого скрипта, но возникают проблемы, потому что иногда скрипты пытаются читать файл одновременно, и это приводит к тому, что мой код обрабатывает sh.

. При одновременном запуске двух или более сценариев это разделяет задачи и помогает увеличить частоту кадров, потому что вместо одного сценария, обрабатывающего все он разделяет процессы между скриптами.

Редактировать:

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

Кто-нибудь знает, как я могу достичь sh моей цели?

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Я нашел грубое решение, которое соответствует моим критериям от друга, используя mmap

main.py

import mmap

while True:
    a=mmap.mmap(0, 100, 'GlobalSharedMemory')    #get data/file
    inp=bytes(input(": "),"utf-8")    #gets input and changes to bytes
    a.write(inp)    # write inp to data/file

control.py

import mmap
while True:
  a=mmap.mmap(0, 100, 'GlobalSharedMemory')    #get data/file
  val=a.read().replace(b"\x00",b"")    #remove empty bytes
  if val != b"":    # if val is not empty
    print(val)    #print val
    a=mmap.mmap(0, 100, 'GlobalSharedMemory')    #get data/file
    a.write(b"\x00"*100)    #re-write data

единственная проблема с этим решением вы не можете напрямую редактировать переменные из других скриптов

0 голосов
/ 16 марта 2020

Это требует многопоточности, так как это два процесса. Самый простой способ сделать это, если у вас есть общие переменные между двумя потоками Переполнение стека общих значений

Если вы хотите, вы можете получить около MUTEX, SEMAPHORE в многопоточности что поможет вам обрабатывать несколько процессов, обращающихся к одному и тому же ресурсу

...