Python - Пропуск обратного вызова веб-сокета "очередь" - PullRequest
0 голосов
/ 18 мая 2018

У меня есть следующее:

def process(msg):
    print(msg)

    for i in range(10):         # This is in place of the
        print(i, end=' ')       # actual task, which takes
        time.sleep(1)           # around 10 seconds to run

ws = websocket()
ws.start_socket_abc(callback=process)

Веб-сокет передает информацию каждую секунду и каждый раз звонит на process.

Скажем, веб-сокет возвращает "one" для этогосекунда, "two" для следующей секунды, "three" для второй после и так далее.При выполнении приведенного выше кода результат будет:

one
0 1 2 3 4 5 6 7 8 9   <- this line takes 10 seconds to finish
two
0 1 2 3 4 5 6 7 8 9   <- this line takes 10 seconds to finish
...

Понятно, что process("two") где-то ставится в очередь и ожидает вызова после завершения process("one").К тому времени, когда программа напечатает two, сообщение в реальном времени должно быть twelve.

То, чего я пытаюсь добиться, это полностью пропустить «очередь».Я хочу, чтобы он принял сообщение, выполнил задание, пропустил все промежуточные вызовы (это важно, мне на самом деле нужно их пропустить), принял следующее сообщение в реальном времени и выполнил задание.Короче говоря, я хочу, чтобы он распечатывал все сообщения в режиме реального времени, когда process("one") завершает свою работу.то есть

one
0 1 2 3 4 5 6 7 8 9   <- this line takes 10 seconds to finish
twelve
...

Это то, что я имею в виду.

message = ''
def process(msg):
    message = msg

ws = websocket()
ws.start_socket_abc(callback=process)

def task(msg=message):
    print(msg)

    for i in range(10):         # This is in place of the
        print(i, end=' ')       # actual task, which takes
        time.sleep(1)           # around 10 seconds to run

start_thread(target=task)

Это выполняет задачу с переменной message, которая изменяется в режиме реального времени с сообщениями, полученными отwebsocket, поэтому после task("one"), message в "twelve" и будет вызван task("twelve"), пропуская все сообщения между ними.

Я сильно сомневаюсь, что это правильный способ сделать это.Кто-нибудь, пожалуйста, просветите меня, спасибо заранее!

...