Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 16, 2015 22:09:52

devalentino
Зарегистрирован: 2013-02-08
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

c extension for python

Добрый вечер.

У меня вопрос по поводу сишных расширений. Есть проект и нужно выполнять паралельно сотни http запросов. Хочу сделать C extention и обрабатывать каждый запрос в отдельном потоке. В расширение можно передать функцию и вызвать ее когда какой-то из потоков выполнится. Мне не совсем ясно что будет с интерпритатором в момент когда я дерну еитоновский колбек. Приостановит ли интерпритатор свою работу и отработает мой колбек? Или расширение вызовет функцию в новом процессе?

Это все пишется к торнадо, то есть хочется чтобы колбеки в IOLoop попадали. Сталкивался ли кто-то из форумчан с подобным?

Офлайн

#2 Фев. 16, 2015 22:24:35

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

c extension for python

Такие задачи лучше делать не отдельными потоками а асинхронными вызовами. Сишная функция будет выполняться в отдельном потоке. GIL на нее не влияет.



Офлайн

#3 Фев. 16, 2015 23:23:26

devalentino
Зарегистрирован: 2013-02-08
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

c extension for python

doza_and
Такие задачи лучше делать не отдельными потоками а асинхронными вызовами. Сишная функция будет выполняться в отдельном потоке. GIL на нее не влияет.

Получается процесс приостановится на время выполнения сишной функции? Как с колбеками? Когда питоновская функция выполнится?

Если есть подробная статья на эту тему - буду очень признателен. На русском или английском. В официальной документации это описывается не достаточно подробно. Хотелось бы диаграмму потоков посмотреть или что-то такое.

Интересует именно интеграция между питоном и C. Асинхронные вызовы торнадо не интересуют.

Спасибо.

Офлайн

#4 Фев. 17, 2015 04:51:14

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

c extension for python

doza_and
Сишная функция будет выполняться в отдельном потоке. GIL на нее не влияет.
Разве при вызове питоновского колбека она не захватит GIL?



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#5 Фев. 17, 2015 22:53:09

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

c extension for python

PooH
Разве при вызове питоновского колбека она не захватит GIL?

конечно захватит



Офлайн

#6 Фев. 18, 2015 05:32:03

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

c extension for python

devalentino
немножко около темы - GIL начинает тормозить выполнение кода в момент нагрузки ЦПУ. В случае сетевых запросов производительность упирается в подсистему ввода вывода. Например не так давно я делал нечто подобное. у меня была очередь из 65000 адресов которые нужно было http запросами опросить. Так вот у меня уперлось все в то что мне система не разрешила сделать более N потоков. Размер N уточню через 5 часов. Так вот, это при том что исполнитель был 1 процесс. если воспользоваться модулем multiprocessing то можно расширить количество открытых потоков, т.е. например каждый новый процесс будет порождать 100 потоков, 10 процессов уже 1000. Конечно же у системы есть некий предел количеству процессов и потоков, и еще и сокетов, но там думается мне бОльшие числа.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version