Строки действительно ли php неизменны?

После некоторого дальнейшего исследования эта проблема, по-видимому, не вызвана непосредственно aiohttp / asyncio, а скорее ограничениями / ограничениями, вытекающими из обоих:

  • Ограничение пропускной способности / скорости ваши DNS-серверы
  • Максимальное количество открытых файлов на системном уровне.

Во-первых, для тех, кто хочет получить некоторые усиленные DNS-серверы (я, вероятно, не буду идти по этому пути), варианты с громкими именами выглядят так:

  • 1.1.1.1 (Cloudflare)
  • 8.8.8.8 (Google Public DNS)
  • Amazon Route 53

( Хорошее введение в DNS для таких, как я для которых отсутствуют сетевые концепции.)

Первое, что я сделал, - запустил вышеописанное на расширенном экземпляре AWS EC2 - h1.16xlarge с Ubuntu, оптимизированной для ввода-вывода. Я не могу сказать, что это само по себе помогло, но это, конечно, не повредит. Я не слишком знаком с DNS-сервером по умолчанию, используемым экземпляром EC2, но ошибка OSError с errno == 8, приведенная выше, исчезла при репликации вышеуказанного сценария.

Однако, на его месте появилось новое исключение, OSError с кодом 24, «Слишком много открытых файлов». Мое решение исправления (не утверждая, что это самый устойчивый или самый безопасный) состояло в том, чтобы увеличить максимальные пределы файла. Я сделал это через:

sudo vim /etc/security/limits.conf
# Add these lines
root    soft    nofile  100000
root    hard    nofile  100000
ubuntu    soft    nofile  100000
ubuntu    hard    nofile  100000

sudo vim /etc/sysctl.conf
# Add this line
fs.file-max = 2097152

sudo sysctl -p

sudo vim /etc/pam.d/commmon_session
# Add this line
session required pam_limits.so

sudo reboot

Я по общему признанию чувствую себя вокруг в темноте, но соединение этого с asyncio.Semaphore(1024) (пример здесь ) привело к ровно 0 из любых двух исключений выше

# Then call this from bulk_get with asyncio.Sempahore(n)
async def bounded_get(sem, url, session) -> str:
    async with sem:
        return await get(url, session)

Из ~ 25 тыс. входных URL-адресов только ~ 100 GET-запросов возвращали исключения, в основном из-за того, что сайты законно ломались, а общее время до завершения приходило в течение нескольких минут, что приемлемо в Мое мнение.

13
задан Henrik Paul 30 January 2009 в 18:43
поделиться

2 ответа

PHP уже оптимизирует его - переменные присвоены с помощью копии на записи, и объекты передаются ссылкой. В PHP 4 это не делает, но никто не должен использовать PHP 4 для нового кода так или иначе.

20
ответ дан 1 December 2019 в 21:12
поделиться

Быстрый Google, казалось бы, предположил бы, что они изменяемы, но предпочтительная практика должна рассматривать их как неизменных.

3
ответ дан 1 December 2019 в 21:12
поделиться
Другие вопросы по тегам:

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