Как сжать потоковую передачу Twitter с помощью LZO в среде Linux/Python/Tweepy?

Я получаю огромное количество потоковых данных из Твиттера, используя Tweepy (библиотека Python API Twitter). Что я хочу сделать, так это сжать поток полученных твитов и сохранить их в файле.

Сжатие должно быть LZO, и я не хочу использовать каналы Linux для сжатия. Я хочу использовать LZO непосредственно из кода Python. Используя трубы Linux, я мог бы сделать:

Python downloader.py | lzop -c > output.json.lzo

Но я не хочу использовать каналы и хочу сжимать поток в загрузчике сценариев Python.

Я не смог найти никакой библиотеки Python или примера кода для сжатия потоковых данных с помощью LZO.


person Ash    schedule 07.05.2016    source источник
comment
Я написал здесь фрагмент кода, который выполняет эту работу: github.com/ afshinrahimi/twitter-fetcher/blob/master/fetcher.py   -  person Ash    schedule 03.11.2016


Ответы (1)


Два варианта:

  1. используйте библиотеку.

  2. если по какой-то причине вы не можете использовать библиотеку, следующий код является эквивалентом того, что вы написали:

    from subprocess import Popen, PIPE, STDOUT
    
    p = Popen(['lzop', '-c'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)    
    result_stdout = p.communicate(input=json.dump(results))[0]
    
person lesingerouge    schedule 07.05.2016
comment
Окончательный код предназначен для пользователей, столкнувшихся с той же проблемой в будущем pastebin.com/npzW5fh7. - person Ash; 08.05.2016
comment
Также в качестве еще одного примечания: если вы используете потоковую передачу, вам не следует использовать p.communicate, поскольку впоследствии он закрывает канал. Вместо этого вы должны использовать p.stdin.write(data), чтобы канал оставался открытым. Для вывода вывода в файл вместо stdout=PIPE вы можете заменить PIPE файлом, как в open('output.json.lzo', 'wb'). - person Ash; 08.05.2016
comment
Код находится здесь: github.com/afshinrahimi/twitter-fetcher/blob /мастер/fetcher.py - person Ash; 09.05.2016