Идиоматический асинхронный дизайн

Команда Google Colab создала блокнот, посвященный загрузке / загрузке внешних данных. Один из блоков - загрузка файлов в локальную систему .

Адаптация их примера к кадру данных Pandas df, сохраненному в виде файла csv:

from google.colab import files
import pandas as pd

df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]})
df.to_csv('dataframe.csv')

files.download('dataframe.csv')

Более конкретный пример ситуации OP (запуск сценария Python внутри ячейки Colab): сначала сценарий

# makeVectors.py
import pandas as pd
df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]})
df.to_csv('dataframe.csv')

И ячейка Colab

!python3 makeVectors.py

from google.colab import files
files.download('dataframe.csv')

Во втором примере есть некоторые проблемы, в частности дополнительные функции, предоставляемые пакетом google.colab (а также любая обычная магия iPython) не работает в рамках вызова python3.

8
задан Matt Green 18 December 2008 в 17:27
поделиться

3 ответа

Также взгляните на Асинхронные шаблоны Маркера и ActiveObject Завершения.

2
ответ дан 5 December 2019 в 20:20
поделиться

Можно хотеть посмотреть на Скрученный Python. Это - хороший основанный на реакторе API, который поддерживает асинхронные операции. Проагент является распространенным словом для асинхронного обработчика завершений как платформы.

4
ответ дан 5 December 2019 в 20:20
поделиться

Это походит на шаблон разработки The Observer. ссылка.

Ваш объект клиента является Наблюдателем. Ваш API принадлежит объекту, это Заметно.

Каждый клиент (в языке Java) реализует интерфейс The Observer. В Python это - вопрос каждого клиента, предлагающего много методов, которые будет использовать Ваше заметное.

class SomeClientInterface( object ):
    def update( self, source, data ):
        # handle data being pushed from Observable source
    def error( self, from, status ):
        # handle error in Observable source

Ваш Заметный объект имеет способ для Наблюдателей зарегистрировать и сделать другие вещи.

class Observable( object ):
    def __init__( self ):
        self.clients= set()
    def register( self, observer ):
        self.clients.add( observer )
    def whenSomethingHappens( self ):
        # doing work
        if itAllWentToHell:
            for c in self.clients:
                c.error( self, "some status object" )
        else:
            for c in self.clients:
                c.update( self, the pushed data )
    def waitFor( self ):
        # observers are waiting...
        return theData
    def status( self ):
        return self.currentState
2
ответ дан 5 December 2019 в 20:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: