• Как сделать словарь?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Задача состоит из двух частей. Первое это чтение документа по словам. Вот как тут пишут
    https://www.geeksforgeeks.org/python-program-to-re...

    И второе, когда поток слов уже есть - добавить их в словарь с генерацией порядкового номера.
    num = 0
    word_dict = {}
    
    // в теле цикла
    if not (word in word_dict):
      word_dict[num] = word
      num = num + 1
    Ответ написан
    Комментировать
  • Взаимосвязь Python с программами?

    Vindicar
    @Vindicar
    RTFM!
    Под наивным "взаимосвязь" скрывается несколько совершенно различных технологий.
    Пакеты pyautogui и pywinauto занимаются вопросами имитации пользовательского ввода (и вообще взаимодействия с интерфейсом программы).
    Если тебе нужно лезть в чужую память - то тут уже нужно использовать win32 API функции ReadProcessMemory()/WriteProcessMemory(). Модуль ctypes в помощь.
    Если тебе нужно лезть в трафик чужого приложения, есть такая штука как dpkt.

    Фокус в том, что ни один из этих инструментов не тривиален в использовании. Нужно хорошо представлять устройство памяти процесса в windows, устройство оконного интерфейса в windows или устройство сетевых протоколов, в зависимости от задачи. А это дело не одного месяца.
    Ответ написан
    4 комментария
  • Как из класса из функции, перетащить значение в другой класс в функцию?

    Vindicar
    @Vindicar
    RTFM!
    Проще всего вынести переменные из локальных в экземпляр класса. А потом дописать второму классу конструктор, и передавать ссылку на первый класс. Но чтобы избежать состояний гонки (когда два потока лезут в одну переменную, и хотя бы один из них - на запись), нужно спрятать переменные dej1 и dej2 под мьютекс(в терминах питона - Lock).
    class search_time(Thread):
      def __init__(self):
        super().__init__()
        self.dej = ""
        self.dej2 = ""
        self.dej_mutex = threading.Lock()
      def run(self):
        #в коде run запись в self.dej1 или self.dej2 делается строго так
        if self.dej_mutex.acquire(): #если Lock уже занят вторым потоком, первый подождёт освобождения
          self.dej1 = "Вася Пупкин"
          self.dej2 = "Жора Золотарёв"
          self.dej_mutex.release() #а теперь сами освободим Lock, чтобы второй поток мог обратиться к переменным

    Во втором потоке создаёшь конструктор, и передаёшь ему ссылку на первый поток.
    class runbot(Thread):
      def __init__(self, st):
        super().__init__()
        self.st = st
      def run(self):
        #в коде обращение к dej1 или dej2 делается строго так
        if self.st.dej_mutex.acquire(): #если Lock сейчас занят первым потоком, ждём освобождения
          print(self.st.dej1, self.st.dej2) #используем переменные
          self.st.dej_mutex.release() #а теперь сами освободим Lock, чтобы первый поток мог обратиться к переменным


    Тогда при создании потоков сделаешь так:
    w1 = search_time()
    w1.start()
    w2 = runbot(w1)
    w2.start()
    Ответ написан
    2 комментария