Отключение бутылки

у меня есть простой REST API, написанный с использованием python 2.7.2, бутылки 0.10.9 и "швейцарского армейского ножа" scrapy 0.14.1.

Вкратце, есть только один метод (myserver:8081/doparse?address="url"), который инициирует очистку URL-адреса с помощью scrapy и возвращает ответ в формате json.

При развертывании скрипта с использованием встроенного сервера бутылки я получаю следующий вывод:

    Shutdown...
Traceback (most recent call last):
  File "parser/main.py", line 67, in <module>
    run(host='ks205512.kimsufi.com', port=8081)
  File "/usr/local/lib/python2.6/dist-packages/bottle.py", line 2391, in run
    server.run(app)
  File "/usr/local/lib/python2.6/dist-packages/bottle.py", line 2089, in run
    srv.serve_forever()
  File "/usr/lib/python2.6/SocketServer.py", line 224, in serve_forever
    r, w, e = select.select([self], [], [], poll_interval)
select.error: (4, 'Interrupted system call')

Вместо этого использование бутылки с другими серверами, такими как cherrypy, не помогает, но приводит к другим ошибкам, таким как:

Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/bottle.py", line 737, in _handle
    return route.call(**args)
  File "/usr/local/lib/python2.6/dist-packages/bottle.py", line 1456, in wrapper
    rv = callback(*a, **ka)
  File "parser/main.py", line 20, in parse
    return parse_url(url)
  File "parser/main.py", line 35, in parse_url
    items = crawler.start(url) # launching crawler
  File "/home/projects/linkedinparser/parser/crawler.py", line 140, in start
    crawler = CrawlerWorker(LinkedinSpider(url), results)
  File "/home/projects/linkedinparser/parser/crawler.py", line 85, in __init__
    self.crawler = CrawlerProcess(settings)
  File "/usr/local/lib/python2.6/dist-packages/scrapy/crawler.py", line 69, in __init__
    install_shutdown_handlers(self._signal_shutdown)
  File "/usr/local/lib/python2.6/dist-packages/scrapy/utils/ossignal.py", line 21, in install_shutdown_handlers
    reactor._handleSignals()
  File "/usr/local/lib/python2.6/dist-packages/twisted/internet/posixbase.py", line 292, in _handleSignals
    _SignalReactorMixin._handleSignals(self)
  File "/usr/local/lib/python2.6/dist-packages/twisted/internet/base.py", line 1129, in _handleSignals
    signal.signal(signal.SIGINT, self.sigInt)
ValueError: signal only works in main thread

Буду признателен за любую помощь. Спасибо


person basilboli    schedule 14.03.2012    source источник
comment
Согласно вашей ошибке, вы используете python2.6, и вы сказали, что используете python 2.7.2 ... Это так задумано или я что-то упустил?   -  person John    schedule 14.03.2012
comment
извините, это связано с использованием разных версий python на машинах разработки и тестирования. я попробовал еще раз с python 2.6 и 2.7, проблема сохраняется только на python 2.6. Спасибо   -  person basilboli    schedule 28.04.2012


Ответы (1)


Реактор по умолчанию по умолчанию устанавливает обработчики сигналов для перехвата таких событий, как Ctrl-C, SIGTERM и так далее. Однако вы не можете установить обработчики сигналов из неосновных потоков в Python, а это означает, что Reactor.run() вызовет ошибку. Передайте аргумент ключевого слова installSignalHandlers=0 в reactor.run, чтобы обойти это.

person windwild    schedule 06.04.2013