Как одновременно запустить несколько экземпляров класса в одном приложении Python с помощью Asyncio?Python

Программы на Python
Anonymous
Как одновременно запустить несколько экземпляров класса в одном приложении Python с помощью Asyncio?

Сообщение Anonymous »

Я пытаюсь одновременно запустить несколько экземпляров класса в одном приложении Python, имитируя эффект наличия отдельных терминалов, запускающих каждый класс независимо. Моя цель — заставить каждый экземпляр работать независимо, а не блокировать друг друга. Я использую asyncio для параллелизма.
Изменить: технически я думаю, что они работают конгруэнтно, но ожидания в одном экземпляре класса операций заставят все остальные классы операций ожидать этого тоже.
Вот упрощенная версия того, чего я пытаюсь достичь:

Код: Выделить всё

import os
from operations import Operations  # Assuming this is my custom class

# Load environment variables
os.environ['ADDRESS1'] = 'address1'
os.environ['PRIVATE_KEY1'] = 'private_key1'
os.environ['ADDRESS2'] = 'address2'
os.environ['PRIVATE_KEY2'] = 'private_key2'

class Operations:
def __init__(self, address, private_key):
self.address = address
self.private_key = private_key

async def run(self):
while True:
print(f"Running operations for {self.address}")
await do_other_thing()
await asyncio.sleep(1)

# Initialize instances with different addresses and private keys
instances = [
Operations(os.getenv('ADDRESS1'), os.getenv('PRIVATE_KEY1')),
Operations(os.getenv('ADDRESS2'), os.getenv('PRIVATE_KEY2'))
]

async def run_instance(instance):
await instance.run()

async def main():
tasks = [asyncio.create_task(run_instance(instance)) for instance in instances]
await asyncio.gather(*tasks)

if __name__ == "__main__":
asyncio.run(main())
Проблема:
Хотя я использую asyncio.create_task для одновременного запуска каждого экземпляра, кажется, что вызовы ожидания в каждом экземпляре Operations вызывают задержки, что делает их видимыми. как будто они не выполняются полностью независимо.
Что я пробовал:
Убедиться, что каждая операция в методе запуска правильно использует ожидание, чтобы позволить другим задачам выполняться одновременно.
Добавление небольших задержек во время сна для предотвращения зацикливания.
Что мне нужно:
Мне нужно руководство о том, как эффективно запускать несколько экземпляров класса одновременно в одном приложении Python, гарантируя, что они работают независимо и максимизируют параллелизм. По сути, я хочу, чтобы каждый экземпляр Operations работал так, как будто он работает в отдельном терминале.
Дополнительная информация:
Версия Python: 3.12
Использование asyncio
Как мне добиться по-настоящему независимого и одновременного выполнения этих экземпляров классов? Будем очень признательны за любую помощь или рекомендации по передовому опыту!

Подробнее здесь: https://stackoverflow.com/questions/787 ... on-applica

Вернуться в «Python»