Size: a a a

2021 January 30

H

Harsh in Scrapy
Imo why use multi processing while the task is iO bound
источник

i

i in Scrapy
at some cases it helps to speed up
источник

К

Кирилл in Scrapy
Yep, it's better to use threads or asyncio for IO bound
источник

H

Harsh in Scrapy
i
at some cases it helps to speed up
Processes take more time initially to spawn up
источник

i

i in Scrapy
I think I should try async/await magic somewhen, but on this old script if was kinda overkill)
источник

H

Harsh in Scrapy
So it gets neturalised by the efforts it take to handle states etc
источник

i

i in Scrapy
Кирилл
Ну, с этим просто, тут зависит от того где у тебя объявление чего-то и где создаёться новый процесс, если объявление до разделения процесса, и эта переменная шэрэд памяти, тогда у обоих процессов будет к ней доступ. А если такую переменную создавать после разделения процессов, тогда она будет для каждого процесса своя.
Думай о форке процесса, как о создании полной копии текущего процесса, в момент создания это полностью идентичные копии, а дальше они расходятся.

Если бы у тебя были треды, а не процессы, тогда оно бы работало примерно так же, только было бы достаточно  простой глобальной переменной которая была бы в куче, а так как процессы полностью изолированы друг от друга, то им нужны общие области памяти, или другие методы коммуникации, чтоб они видели что-то общее.
А новый процесс получается создается когда with multiprocessing.Pool(4) as pool: ?
источник

i

i in Scrapy
*верней процессы эти пуляторские
источник

К

Кирилл in Scrapy
создание процесса занимает где-то в 10 раз больше времени, чем создание треда. А асик и того быстрее, так как там просто код в одном процессе и в главном треде
источник

К

Кирилл in Scrapy
i
А новый процесс получается создается когда with multiprocessing.Pool(4) as pool: ?
Точно не скажу, так как не знаю, но или тут или на следующей строчке где у тебя передаётся функция которая будет вызвана в процессе
источник

К

Кирилл in Scrapy
Смотрю сейчас код пула, там оно вообще создаёт новый тред, который создаёт процессы
источник

К

Кирилл in Scrapy
Если хочешь, могу скинуть топовую книгу по линуксу, там всё это есть
источник

i

i in Scrapy
давай!
источник
2021 January 31

AB

Arkady B in Scrapy
i
Подскажите - есть у меня реквестовая sess = requests.Session(), к ней потом добавляются заголовки, кукисы и прочее, как бы ее пошарить в пул multiprocessing, так, чтобы она передавалась с одинаковыми кукисами в функцию, по которой пробегает map, ну или шарилась между всеми запросами?
1. Я не очень понял - сессию создавать надо до или после строчки if __name__ == "__main__": - я пока создаю ее после, потом создаю уже with pool и пробегаюсь стармапом по пулу, если я ее создаю до - то все действия почему-то как-то непонятно повторяться начинают.
2. Можно ли сделать так (см. sess как третий аргумент для стармапа):
import itertools
with multiprocessing.Pool(4) as pool:
   cur_data = pool.starmap(get_cur_data, zip(repeat(same_arg), inside_links, repeat(sess)))

ну и внутри get_cur_data
r = sess.get(inside_link, verify=verify)
return r.text
2.

https://github.com/requests/requests/issues/2766

Лучше в каждом треде/ процессе свою сессию держать. Но тебе правильно говорят, что надо брать async и делать по нормальному.
источник

К

Кирилл in Scrapy
источник

К

Кирилл in Scrapy
i
давай!
Выше скинул
источник

i

i in Scrapy
Спасибо
источник

AP

Alex Python in Scrapy
ребят, чем удобнее сниффить post get запросы?) а то чёт юзаю встроенный в браузер снифер и там как насыпает, что все желание отпадает )
источник

AR

Andrey Rahmatullin in Scrapy
ткнуть в вкладку XHR  в 80% случаев достаточно
источник

AR

Andrey Rahmatullin in Scrapy
ну или в Doc если это не аякс
источник