суббота, 19 марта 2011 г.

Segmentation fault при использовании pycurl в Linux.

Написал клиенту простейший скрипт с использованием pycurl (я его всегда, кстати, использую), который состоит буквально из одного get-запроса, а при использовании этого скрипта под Linux, начала периодически валиться ошибка Segmentation fault и обрывать работу скрипта. Как выяснилось надо было вставить следующий кусочек кода, чтобы этого не происходило:

import sys
import pycurl

try:
import signal
from signal import SIGPIPE, SIG_IGN
signal.signal(signal.SIGPIPE, signal.SIG_IGN)
except ImportError:
pass

Пока не пробовал, но чтобы не забыть решил записать.

6 комментариев:

  1. Можно еще вот так:
    self.curl.setopt(pycurl.NOSIGNAL, 1)

    ОтветитьУдалить
  2. Юзал бы grab, там эти фишки уже давно учтены :)

    ОтветитьУдалить
  3. А можешь что нибудь про Twisted написать для нашего дела сеошного?)

    ОтветитьУдалить
  4. да, именно ответ balcon'а - самое правильное решение.
    кстати, хочу спросить присутствующих, не покажете грамотный пример использования CurlMulti на реальной задаче (можно ссылку на репо проекта)? Документация, идущая с pycurl описывает CurlMulti поверхностно и путано. Спасибо.

    ОтветитьУдалить
  5. Николай, а объясни, пожалуйста:
    1. зачем импортишь sys?
    2. что весь этот вышеуказанный код означает?

    ОтветитьУдалить
  6. Да это скопировал лишнее, в общем смотри пост balcon'а, а на мой забей=)

    ОтветитьУдалить