Форум сайта python.su
Добрый вечер.
У меня вопрос по поводу сишных расширений. Есть проект и нужно выполнять паралельно сотни http запросов. Хочу сделать C extention и обрабатывать каждый запрос в отдельном потоке. В расширение можно передать функцию и вызвать ее когда какой-то из потоков выполнится. Мне не совсем ясно что будет с интерпритатором в момент когда я дерну еитоновский колбек. Приостановит ли интерпритатор свою работу и отработает мой колбек? Или расширение вызовет функцию в новом процессе?
Это все пишется к торнадо, то есть хочется чтобы колбеки в IOLoop попадали. Сталкивался ли кто-то из форумчан с подобным?
Офлайн
Такие задачи лучше делать не отдельными потоками а асинхронными вызовами. Сишная функция будет выполняться в отдельном потоке. GIL на нее не влияет.
Офлайн
doza_and
Такие задачи лучше делать не отдельными потоками а асинхронными вызовами. Сишная функция будет выполняться в отдельном потоке. GIL на нее не влияет.
Офлайн
doza_andРазве при вызове питоновского колбека она не захватит GIL?
Сишная функция будет выполняться в отдельном потоке. GIL на нее не влияет.
Офлайн
PooHконечно захватит
Разве при вызове питоновского колбека она не захватит GIL?
Офлайн
devalentino
немножко около темы - GIL начинает тормозить выполнение кода в момент нагрузки ЦПУ. В случае сетевых запросов производительность упирается в подсистему ввода вывода. Например не так давно я делал нечто подобное. у меня была очередь из 65000 адресов которые нужно было http запросами опросить. Так вот у меня уперлось все в то что мне система не разрешила сделать более N потоков. Размер N уточню через 5 часов. Так вот, это при том что исполнитель был 1 процесс. если воспользоваться модулем multiprocessing то можно расширить количество открытых потоков, т.е. например каждый новый процесс будет порождать 100 потоков, 10 процессов уже 1000. Конечно же у системы есть некий предел количеству процессов и потоков, и еще и сокетов, но там думается мне бОльшие числа.
Офлайн