Я использовал Thespian для разработки приложения, которое потребляет данные с низкой задержкой через сокеты.Первоначально я создал два актера: один потребитель (соединение с сокетом-клиентом) и обработчик.В ходе тестирования я обнаружил некоторые задержки между временем, которое было использовано для отправки одного сообщения получателю (Actor1), и моментом, когда это сообщение поступило в обработчик (Actor2).
Чтобы проверить это, я использовал следующий код.
from thespian.actors import ActorSystem, Actor
import time
class Actor1(Actor):
def receiveMessage(self, handler, sender):
# benchmark
data = {'tic': time.perf_counter(), 'lim': 10000}
print('Elapsed Time to process {} messages'.format(data['lim']))
for i in range(data['lim']):
self.send(handler, data)
# perf
toc = time.perf_counter() - data['tic']
print('Actor 1: {} sec'.format(round(toc, 3)))
# self.actorSystemShutdown()
class Actor2(Actor):
def __init__(self):
self.msg_count = 0
def receiveMessage(self, data, sender):
self.msg_count += 1
if self.msg_count == data['lim']:
toc = time.perf_counter() - data['tic']
print('Actor 2: {} sec'.format(round(toc, 3)))
def main():
asys = ActorSystem('multiprocTCPBase')
consumer = asys.createActor(Actor1)
handler = asys.createActor(Actor2)
asys.tell(consumer, handler)
if __name__ == '__main__':
main()
Результаты:
Elapsed Time to process 10 messages
Actor 1: 0.002 sec
Actor 2: 0.008 sec
Elapsed Time to process 100 messages
Actor 1: 0.019 sec
Actor 2: 0.099 sec
Elapsed Time to process 1000 messages
Actor 1: 0.131 sec
Actor 2: 0.769 sec
Elapsed Time to process 10000 messages
Actor 1: 1.219 sec
Actor 2: 7.608 sec
Elapsed Time to process 100000 messages
Actor 1: 22.012 sec
Actor 2: 91.419 sec
Смотря эти результаты, что-то не так или отсутствует, что у меня есть в моем коде?, Или есть другой более быстрый способотправлять сообщения между актерами?Кроме того, существует любой другой тест, который поможет нам проанализировать производительность , прокомментированную в документации .