Дублирование кода для синхронной и асинхронной реализации.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Дублирование кода для синхронной и асинхронной реализации.

Сообщение Anonymous »

При реализации классов, которые используются как в синхронных, так и в асинхронных приложениях, я использую практически идентичный код для обоих вариантов использования.

В качестве примера рассмотрим:

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

from time import sleep
import asyncio

class UselessExample:
def __init__(self, delay):
self.delay = delay

async def a_ticker(self, to):
for i in range(to):
yield i
await asyncio.sleep(self.delay)

def ticker(self, to):
for i in range(to):
yield i
sleep(self.delay)

def func(ue):
for value in ue.ticker(5):
print(value)

async def a_func(ue):
async for value in ue.a_ticker(5):
print(value)

def main():
ue = UselessExample(1)
func(ue)
loop = asyncio.get_event_loop()
loop.run_until_complete(a_func(ue))

if __name__ == '__main__':
main()
В этом примере все не так уж и плохо: методы тикера UselessExample легко поддерживать в тандеме, но вы можете себе представить это исключение обработка и более сложная функциональность могут быстро разрастить метод и сделать его более проблематичным, хотя оба метода могут оставаться практически идентичными (только заменяя определенные элементы их асинхронными аналогами).

Предполагая, что нет существенной разницы, которая оправдывала бы полную реализацию обоих, каков наилучший (и наиболее Pythonic) способ поддерживать такой класс и избегать ненужного дублирования?>

Подробнее здесь: https://stackoverflow.com/questions/551 ... mentations
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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