Size: a a a

2019 May 20

AB

Artöm Bakri Al-Sarmini in pro.python
В питончате на 8к человек активность слишком адская, спрошу здесь: есть подобие raii обертки в питоне? Есть

fpool: Dict[str, TextIO] = []

def write(name, s, fpool):
   if name not in fpool:
       fpool[name] = open(...)

def clear(fpool):
   for f in fpool:
      f.close()

def do(..., fpool):
   # use fpool somehow

do(..., fpool)
clear(fpool)

Как сделать, чтобы после do fpool чистился сам?
источник

AB

Artöm Bakri Al-Sarmini in pro.python
Как-то я запамятовал, есть ли деструкторы в питоне и как они работают
источник

i

irdkwmnsb in pro.python
Artöm Bakri Al-Sarmini
Как-то я запамятовал, есть ли деструкторы в питоне и как они работают
Да,
__del__
источник

i

irdkwmnsb in pro.python
Я хотел спросить по celery, если я в таске вызываю другую таску и она делаеть update_state как мне сказать об этом родителю?
источник

ED

Eugene Denisov in pro.python
Artöm Bakri Al-Sarmini
В питончате на 8к человек активность слишком адская, спрошу здесь: есть подобие raii обертки в питоне? Есть

fpool: Dict[str, TextIO] = []

def write(name, s, fpool):
   if name not in fpool:
       fpool[name] = open(...)

def clear(fpool):
   for f in fpool:
      f.close()

def do(..., fpool):
   # use fpool somehow

do(..., fpool)
clear(fpool)

Как сделать, чтобы после do fpool чистился сам?
Использовать контекстные менеджеры, например. Написать такой менеджер, который при выходе очищается.
источник

ED

Eugene Denisov in pro.python
irdkwmnsb
Я хотел спросить по celery, если я в таске вызываю другую таску и она делаеть update_state как мне сказать об этом родителю?
Например в стэйте хранить таймштамп последнего обновления. Или передавать информацию в возвращаемом значении.
источник

i

irdkwmnsb in pro.python
Видимо я был не понят. У меня есть таск, который запускает другие таски. Эти таски меняют свой state с помощью update_state. Как мне все эти вызовы update_state поймать и передать выше к процессу который запустил первый таск
источник

AB

Artöm Bakri Al-Sarmini in pro.python
irdkwmnsb
Да,
__del__
Нужно, чтобы clear всегда запускалась после do
источник

AB

Artöm Bakri Al-Sarmini in pro.python
О, в питоне есть try finally?
источник

i

irdkwmnsb in pro.python
Да
источник

AB

Artöm Bakri Al-Sarmini in pro.python
clear не чтобы удалять словарь, а чтобы файлы закрывать
источник

AB

Artöm Bakri Al-Sarmini in pro.python
Писал, у меня как-то по-другому называется
источник

i

irdkwmnsb in pro.python
Artöm Bakri Al-Sarmini
clear не чтобы удалять словарь, а чтобы файлы закрывать
просто после последней строчки do
написать clear(fpool)??
источник

i

irdkwmnsb in pro.python
И если вы хотите использовать словарь ключ -> значение в первой строчке нужно использовать тип dict а не list
источник

AB

Artöm Bakri Al-Sarmini in pro.python
irdkwmnsb
просто после последней строчки do
написать clear(fpool)??
А если исключение вылетит?
источник

AB

Artöm Bakri Al-Sarmini in pro.python
irdkwmnsb
И если вы хотите использовать словарь ключ -> значение в первой строчке нужно использовать тип dict а не list
Так у меня Dict
источник

i

irdkwmnsb in pro.python
нет, после этой строчки fpool будет иметь тип list
источник

i

irdkwmnsb in pro.python
Artöm Bakri Al-Sarmini
А если исключение вылетит?
Обернуть все в try catch finally
источник

AB

Artöm Bakri Al-Sarmini in pro.python
irdkwmnsb
Обернуть все в try catch finally
Да, так и сделаю. Спасибо
источник

ED

Eugene Denisov in pro.python
irdkwmnsb
Обернуть все в try catch finally
Не. Лучше контекстный менеджер. finally не всегда выполняется.
источник