На самом деле - хорошо, что гибко. Шаблон может быть взят откуда угодно.
>>> t = 'i = %s'>>> for i in range(3):... print(t % i)... i = 0i = 1i = 2
%, "".формат() - легко, а с f-string придется прокладки какие то мутить.
ЗыЖ Вроде, где то читал, что f-string быстрее всех, но это неточно. Не проверял.
Ух ты любишь %? Через f-string принтить нагляднее)
Вредная привычка - 2 натура😣 А так, если больше 2/3 переменных, то скорее так напишу.
print(f'b_list[{i}]={v}')
А вот так -
print('b_list[{}]={}'.format(i, v))
В курсе, что изменение b_list приведет к изменению а_list? Ибо это ссылки на одно и тоже.
assert id(b_list) == id(a_list), 'одинаковы ли переменные?'
будет list index out of range, [1,2,3] - len(b_list) = 3 => b_list[3] юк
Проще все
for i, v in enumerate(b_list): print('b_list[%s]=%s' % (i, v))
Там просто пых 8, у вас 5+, судя по mysql_query
Вы просто в своем скрипте приберитесь
$urlmass[] = $url; $newmass[] = $stroka; $stroka = trim($stroka, "\n"); $e = "$stroka\n"; fwrite($filesotbor,$e);
$urlmass[] = $url;
Как знать. Может - решение сделать все более-менее правильно. 2 минуты контрол-с/контрол-в, + несколько строк:
<?phpheader('Content-Type:text/plain');set_error_handler(function($code, $string, $file, $line){ throw new ErrorException($string, null, $code, $file, $line); });register_shutdown_function(function(){ $error = error_get_last(); if(null !== $error) { echo 'Last error: '; print_r($error); } });class tm { private $tm = 0, $start = 0; public function __construct( ) { $this->start = microtime(1); $this->tm = $this->start; } public function _($msg){ echo "\n----\nTrace: ", $msg, ":\n"; $t = microtime(1); echo " Mem,mb (usage/peak_usage): ", sprintf('%01.2f / %01.2f', (memory_get_usage()/1048576), (memory_get_peak_usage()/1048576)), "\n Time,ms (before start/before previous): ", sprintf('%01.8f / %01.8f', ($t - $this->start)*1000, ($t - $this->tm)*1000 ), "\n--\n"; $this->tm = $t; }}$tm = new tm();$tm->_('start by phpversion ' . phpversion());$fn = __DIR__ . '/5';echo "\n",sprintf("File to read: %s, size: %dMb", $fn, filesize($fn)/1048576);$fn1 = __DIR__ . '/51';$h = fopen($fn,'r');$h1 = fopen($fn1,'w');$i = 0;while (($b = fgets($h)) !== false) { #Имитация манипуляций со строкой $b = explode(' ', $b); $b = implode(' ', $b); #Пишем. fwrite($h1, $b); $i++;}echo "\nLine in file: $i\n";$tm->_(sprintf ('Newfilesize = %dMb; end ', filesize($fn1)/1048576));fclose($h);fclose($h1);
Результат:
Нетрудно заметить, то чтение 8гиг файла в 5000000 строк
Trace: Newfilesize = 8305Mb; end : Mem,mb (usage/peak_usage): 0.35 / 0.47 Time,ms (before start/before previous): 86891.42990112 / 86891.41702652
$urlmass[] = $url;$newmass[] = $stroka;
Если $urlmass, что бы не собирать дубли урл, то назначение $newmass не ясно. Зачем собирать файл в массив?
Не, хватает на 10 тыс строк
К 10 тыс строке, в нем копия 10 тыс строк из файла. Поэтому и Allowed memory size. По остальному - воздержусь.
В Go из-за отсутствия дженериков нет нормального способа для работы с коллекциями данных (filter, map).
Это, да, сильно неудобно. Сочувствую. У меня львиная доля это манипуляции с какими то коллекциями.
Полагаю, издержки типизации - за скорость надо заплатить. Возможно, просто го относительно молодой язык, выше писали, что обещают довезти плюшки.
Я пока не сильно погружался в го. Да и со временем туго. Но, чуть позже, обязательно вникну. Есть планы (го/или что) внедрить, что бы расширить некоторые узкие места в своих поделках.
Рутина, иными словами. Но, такое везде есть. Причем, существенная, наверное часть. "+/- " есть у всех языков, тут только вздохнуть: "такова селяви".
(aenv) [www@localhost php_sock]$ /home/www/go/bin/bombardier -c 800 -n 2000 -l -H "User-agent: Mozilla" https://n.aio1/Bombarding https://n.aio1:443/ with 2000 request(s) using 800 connection(s) 2000 / 2000 [=================================================================================================================] 100.00% 1108/s 1sDone!Statistics Avg Stdev Max Reqs/sec 1171.34 1365.09 6251.16 Latency 643.61ms 403.23ms 1.72s Latency Distribution 50% 537.12ms 75% 0.87s 90% 1.23s 95% 1.53s 99% 1.69s HTTP codes: 1xx - 0, 2xx - 1792, 3xx - 0, 4xx - 0, 5xx - 208 !!!!!! others - 0 Throughput: 63.63MB/s
5xx типа того:
File "/var/www/aweb/aenv/lib/python3.9/site-packages/aioredis/connection.py", line 868, in read_response raise response from Noneaioredis.exceptions.ResponseError: OOM command not allowed when used memory > 'maxmemory'.
Заценил