Python переменная доступа / массив (который динамически изменяется) из другого python - PullRequest
0 голосов
/ 19 января 2020

У меня сложная проблема, которую нужно исправить.

У меня есть два python файла: первый main.py - это серверный скрипт te lnet, который считывает данные из программного обеспечения для сбора данных. Мне удалось прочитать программное обеспечение для входного сигнала (сила или крутящий момент) и использовать его в моем файле python. У меня есть второй файл ( second.py ), ведьма - это скрипт на основе OpenCV, который делает измерения в реальном времени с помощью веб-камеры / камеры с замедленным движением

Мне не удается использовать ### data_val = [] ### из main.py в файл second.py Если я вызову second.py в main.py, процессы не будут одновременными (сначала запускается second.py, а после остановки он продолжает работать с main. py)

Мне нужно использовать в main.py data_val = [] (динамически изменяющийся / обновляемый) в second.py (как динамически изменяющееся значение, которое будет использоваться в математическом уравнении который выглядит как size = data_val = [] / a_variable_from_second.py) Я думаю, что это подразумевает также запуск и запуск процессов одновременно.

Пожалуйста, смотрите изображения.

main .py структура:

сокет импорта

import sys

threading

import struct

import copy

импорт matplotlib.pyplot как plt

импорт matplo tlib.animation как анимация

import numpy as np

время импорта

................... .......................................

..... .................................................. ...

......................................... .................

class MyThread(threading.Thread):
def __init__(self, ready, list_of_used_ch):
    threading.Thread.__init__(self)
    self.ready = ready
    self.list_of_used_ch = list_of_used_ch
    self.buffer_data = b''

def run(self):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    print('Socket created')
    global data_val
    # Bind socket to local host and port
    try:
        s.bind((HOST, PORT))
    except socket.error as msg:
        print('Bind failed. Error Code : ' + str(msg.args[0]) + ' Message ' + msg.args[1])
        s.close()
        sys.exit()

    print('Socket bind complete')
    # Start listening on socket
    s.listen(10)
    print('Socket now listening')

    # now keep talking with the client
    # wait to accept a connection - blocking call
    conn, addr = s.accept()
    print('Connected with ' + addr[0] + ':' + str(addr[1]))
    self.ready.set()
    while True:
        self.buffer_data += conn.recv(2000)  # size 2000 is default size of dewesoft packages
        #print(format(self.buffer_data))
        if not self.buffer_data:
            break

        current_package = Package(self.buffer_data)
        if not current_package.full_package:
            continue
        else:
            self.buffer_data = self.buffer_data[current_package.end_index + 8:]
            for i in range(0, len(self.list_of_used_ch)):
                if self.list_of_used_ch[i].async_ch:
                    channel_data, timestamp = current_package.read_data_as_async(self.list_of_used_ch[i].data_type, self.list_of_used_ch[i].data_type_size)


                    data_val = []
                    data_val.append(channel_data)
                    print(str(data_val).lstrip('[').rstrip(']'))

                    time_val = []
                    time_val.append(timestamp)
                    #print(str(time_val).lstrip('[').rstrip(']'))

                    if len(channel_data) > 0:
                        self.list_of_used_ch[i].channel_data.append(channel_data)
                        self.list_of_used_ch[i].timestamp.append(timestamp)
                elif self.list_of_used_ch[i].single_value:
                    self.list_of_used_ch[i].channel_data = current_package.read_data_as_single_value(self.list_of_used_ch[i].data_type, self.list_of_used_ch[i].data_type_size)
                else:
                    self.list_of_used_ch[i].channel_data = current_package.read_data_as_sync(self.list_of_used_ch[i].data_type, self.list_of_used_ch[i].data_type_size)
    s.close()

Спасибо

...