Моя фрагментированная "куча"

РЕДАКТИРОВАТЬ: Для контекста, поскольку исходный вопрос был обновлен кем-то другим и изменил исходный код, исходный шаблон, который использовал пользователь, был r'/([\w_-]+.). Это была оригинальная проблема. Этот контекст позволит сделать следующий ответ более понятным:

Я использовал шаблон, подобный r'/([\w_.-]+). Шаблон, который вы использовали, не позволял пути содержать ., кроме как в качестве последнего символа, потому что . за пределами [] означает любой символ, и вы имели его прямо перед $ (конец строки ). Поэтому я переместил . в [], что означает, что в группе персонажей можно использовать литерал .. Это позволило шаблону захватывать имена файлов изображений в конце URL.

import re
import requests
from bs4 import BeautifulSoup

site = 'http://pixabay.com'

response = requests.get(site)

soup = BeautifulSoup(response.text, 'html.parser')
img_tags = soup.find_all('img')

urls = [img['src'] for img in img_tags]

for url in urls:
    filename = re.search(r'/([\w_.-]+). Шаблон, который вы использовали, не позволял пути содержать ., кроме как в качестве последнего символа, потому что . за пределами [] означает любой символ, и вы имели его прямо перед $ (конец строки ). Поэтому я переместил . в [], что означает, что в группе персонажей можно использовать литерал .. Это позволило шаблону захватывать имена файлов изображений в конце URL. 

[110]
. Это была оригинальная проблема. Этот контекст позволит сделать следующий ответ более понятным:

Я использовал шаблон, подобный r'/([\w_.-]+). Шаблон, который вы использовали, не позволял пути содержать ., кроме как в качестве последнего символа, потому что . за пределами [] означает любой символ, и вы имели его прямо перед $ (конец строки ). Поэтому я переместил . в [], что означает, что в группе персонажей можно использовать литерал .. Это позволило шаблону захватывать имена файлов изображений в конце URL.

[110]. Шаблон, который вы использовали, не позволял пути содержать ., кроме как в качестве последнего символа, потому что . за пределами [] означает любой символ, и вы имели его прямо перед $ (конец строки ). Поэтому я переместил . в [], что означает, что в группе персонажей можно использовать литерал .. Это позволило шаблону захватывать имена файлов изображений в конце URL.

[110], url) with open(filename.group(1), 'wb') as f: if 'http' not in url: # sometimes an image source can be relative # if it is provide the base url which also happens # to be the site variable atm. url = '{}{}'.format(site, url) response = requests.get(url) f.write(response.content)
. Шаблон, который вы использовали, не позволял пути содержать ., кроме как в качестве последнего символа, потому что . за пределами [] означает любой символ, и вы имели его прямо перед $ (конец строки ). Поэтому я переместил . в [], что означает, что в группе персонажей можно использовать литерал .. Это позволило шаблону захватывать имена файлов изображений в конце URL.

[110]. Это была оригинальная проблема. Этот контекст позволит сделать следующий ответ более понятным:

Я использовал шаблон, подобный r'/([\w_.-]+). Шаблон, который вы использовали, не позволял пути содержать ., кроме как в качестве последнего символа, потому что . за пределами [] означает любой символ, и вы имели его прямо перед $ (конец строки ). Поэтому я переместил . в [], что означает, что в группе персонажей можно использовать литерал .. Это позволило шаблону захватывать имена файлов изображений в конце URL.

[110]. Шаблон, который вы использовали, не позволял пути содержать ., кроме как в качестве последнего символа, потому что . за пределами [] означает любой символ, и вы имели его прямо перед $ (конец строки ). Поэтому я переместил . в [], что означает, что в группе персонажей можно использовать литерал .. Это позволило шаблону захватывать имена файлов изображений в конце URL.

[110]
9
задан Keith 15 May 2009 в 09:28
поделиться

1 ответ

Итак ... мы знаем, что у нас есть фрагментированная куча. Следующий вопрос: что вызывает фрагментацию? Что удерживает эти бесплатные объекты от выпуска? Я прочитал рекомендации: проверять объекты сразу после освобождения свободного места:

  1. ! Dumpheap -stat

  2. Дамп таблицы методов бесплатного объекта:! Dumpheap -mt 000db8e8

  3. Выберите один свободный объект из списка для более внимательного изучения:! dumpobj 0x2003b0b0

  4. Запишите размер объекта

  5. Выгрузите следующий объект после него:! dumpobj 0x2003b0b0 + 1000

  6. Найдите объект, содержащий ссылку! gcroot 0x2003b0b0 + 1000

  7. Дамп gchandle найденного объекта.

Обычно я оказываюсь в этой кроличьей норе, и мои ограниченные знания .NET API здесь не подходят. Это правильный способ отладки проблемы?

Джефф

5
ответ дан 3 November 2019 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: