У меня есть следующее:
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")
, пропуская все сообщения между ними.
Я сильно сомневаюсь, что это правильный способ сделать это.Кто-нибудь, пожалуйста, просветите меня, спасибо заранее!