отправка усредненных битов за временной интервал - PullRequest
0 голосов
/ 09 мая 2020

Предположим, я должен отправить бит b, созданный в момент t. Я должен отправить этот бит после задержки в "d". В течение этого времени задержки «d» должно прийти больше битов, и я должен взять среднее значение битов в интервале [t-0.5, t+0.5]. Я создал планировщик в python, например:

import threading 
import time
from time import sleep

running_schedular = []
CM2PIX = 30/720
OFFSETCM = 38
SPEED = 90/8.8

class Schedular:
    def __init__(self, _time, _bits, _loc):
        self.trigger_time = _time
        self.trigger_bits = _bits
        self.location = _loc
    def process(self, _delay):
        global running_schedular
        sleep(_delay)
        print("data sent: {} at {} ".format(self.trigger_bits, self.location))
        # function to send bits
        running_schedular.pop(self.location)

class SendingBits:
    def setBits(self, _time, _bits):
        global running_schedular
        for i in range(len(running_schedular)):
            sch = running_schedular[i]
            if _time > sch.trigger_time - 0.5 and _time < sch.trigger_time + 0.5:
                sch.trigger_bits = sch.trigger_bits | _bits
                return
        sch = Schedular(_time, _bits, len(running_schedular))
        thread = threading.Thread(target=sch.process, args=(_time - time.time(),))
        thread.start()
        running_schedular.append(sch)

sendingBits = SendingBits()
while True:
    _time = time.time()+ ((720-720/2)*CM2PIX + OFFSETCM)/SPEED
    sendBits = 0 | 0x02
    sendingBits.setBits(_time, sendBits)

Но приведенная выше программа не является потокобезопасной и выдает мне случайную ошибку:

Exception in thread Thread-61:
Traceback (most recent call last):
  File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py", line 917, in _bootstrap_inner
    self.run()
  File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py", line 865, in run
    self._target(*self._args, **self._kwargs)
  File "test.py", line 20, in process
    running_schedular.pop(self.location)
IndexError: pop index out of range

Можете ли вы предложить мне как лучше решить эту проблему или предложить улучшения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...