безопасность потока urllib2 и cookielib - PullRequest
3 голосов
/ 25 июня 2010

Насколько я могу судить, cookielib не безопасен для потоков;но опять же пост, в котором говорится, что ему пять лет, так что он может быть неправильным.

Тем не менее, мне было интересно - если бы я создал такой класс:каждый рабочий поток, это будет работать?(или есть лучший подход?) Каждый поток будет использовать свою учетную запись;поэтому тот факт, что работники не будут делиться своими куки, не является проблемой.

Ответы [ 3 ]

2 голосов
/ 27 января 2013

Вы можете увидеть реализацию библиотеки [python_install_path]/lib/cookielib.py, чтобы убедиться, что cookielib.CookieJar является поточно-ориентированным .

Это означает, что если вы поделитесь одним экземпляром CookieJar между несколькими соединениями в разных потоках, вы не столкнетесь даже с непоследовательным чтением Cookie Set, поскольку CookieJar использует блокировку self._cookies_lock внутри.

2 голосов
/ 01 июля 2010

Вы хотите использовать pycurl (интерфейс Python для libcurl ).Он ориентирован на многопотоковое исполнение, поддерживает файлы cookie, https и т. Д. Интерфейс немного странный, но к нему нужно привыкнуть.

Я использовал только pycurl w / HTTPBasicAuth + SSL, ноЯ нашел пример использования pycurl и куки здесь .Я полагаю, что вам нужно обновить pycurl.COOKIEFILE (строка 74) и pycurl.COOKIEJAR (строка 82), чтобы иметь какое-то уникальное имя (возможно, отключив id(self.crl)).

Как я помню, выВам нужно будет создать новый pycurl.Curl() для каждого запроса, чтобы обеспечить безопасность потока.

1 голос
/ 10 февраля 2011

тот же вопрос, что и у вас. Если вы не используете pycurl, я думаю, что вы должны urllib2.install_opener (self.opener) перед каждым urllib2.urlopen.

Может быть, я тоже должен использовать pycurl, urllib2 не такой умный.

...