LINUX.ORG.RU

Сообщения prozaik

 

Как скачать bpmn-файл?

По http я получаю bpmn-файл. Через вкладку network я вижу, что этот файл приходит в браузер. Он в формате XML. Проблема в том, что при попытке вывести содержимое ответа через console.log()

this.service.getBpnm(123).subscribe(bpnm => {
  debugger
  console.log(bpnm);
});

я получаю следующее сообщение об ошибке(точка останова не отрабатывает):

error:
error: SyntaxError: Unexpected token < in JSON at position 0 at JSON.parse ...
headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, lazyInit: ƒ}
message: "Http failure during parsing for http://localhost:4200/..."
name: "HttpErrorResponse"
ok: false
status: 200
statusText: "OK"
url: "http://localhost:4200/...

При этом в запросе я указывал MIME-тип:

return this.http.get('qwerty', { headers: new HttpHeaders().set('Content-Type', 'application/octet-stream') });

Также пробовал вместо «application/octet-stream» указывать «application/xml»

Подскажите пожалуйста как вывести содержимое ответа через console.log()

 ,

prozaik
()

Как удалить ветку после merge?

У меня было 2 ветки: master и feature. Я вёл их параллельно и потом решил смержить feature-ветку в master-ветку. После успешного мерджа консоль визуально показывала 2 ветки поэтому я решил удалить ветку feature. Удаление прошло успешно, но после этого консоль всё равно показывает две ветки.

Скажите пожалуйста, можно ли как-нибудь избавиться от feature чтобы не загромождать вид? Теоретически возможна ситуация когда придётся вести одновременно 20 feature веток и выглядеть это будет неудобно, если не чистить.

Ниже код, в который поясняет вопрос:

Switched to branch 'master'
md@md ~/.MINT18/code/git/merge $ git hist
*   5a8014e 2021-03-08 | m8 (HEAD -> master) [kalinin]
|\  
| * 4220d18 2021-03-08 | f7 (feature) [kalinin]
| * 93062a3 2021-03-08 | f6 [kalinin]
| * 02efa31 2021-03-08 | f4 [kalinin]
| * 5bde83a 2021-03-08 | f3 [kalinin]
* | b417e0e 2021-03-08 | m5 [kalinin]
|/  
* a3a8961 2021-03-08 | m2 [kalinin]
* ede090f 2021-03-08 | m1 [kalinin]
md@md ~/.MINT18/code/git/merge $ git br -a
  feature
* master
md@md ~/.MINT18/code/git/merge $ git br -D feature 
Deleted branch feature (was 4220d18).
md@md ~/.MINT18/code/git/merge $ git br
* master
md@md ~/.MINT18/code/git/merge $ git hist
*   5a8014e 2021-03-08 | m8 (HEAD -> master) [kalinin]
|\  
| * 4220d18 2021-03-08 | f7 [kalinin]
| * 93062a3 2021-03-08 | f6 [kalinin]
| * 02efa31 2021-03-08 | f4 [kalinin]
| * 5bde83a 2021-03-08 | f3 [kalinin]
* | b417e0e 2021-03-08 | m5 [kalinin]
|/  
* a3a8961 2021-03-08 | m2 [kalinin]
* ede090f 2021-03-08 | m1 [kalinin]

 ,

prozaik
()

Как подгрузить значения в выпадающий список?

Помогите пожалуйста решить простейшую задачку. проблема в том, что мне нужно обязательно использовать библиотеку alpaca: http://www.alpacajs.org/

Есть форма, которая состоит из двух полей типа select. первый селект заполнен двумя вариантами выбора: ‘forest’, ‘lake’. я хотел бы чтобы если пользователь в первом селекте выбирает значение ‘forest’, то во второй список подгружались бы варианты выбора:

a: 1,
a: 11

если пользователь в первом селекте выбирает значение ‘lake’, то во второй список подгружались бы варианты выбора:

a: 1111,
a: 11111

проблема в том, что у меня второй селект всегда пустой.

вот ссылка на live demo: https://jsfiddle.net/a7j8owm5/26/

 

prozaik
()

как запушить в github?

помогите пожалуйста понять суть проблемы. на github существует репозиторий, в который я несколько лет без проблем пушил. но сегодня при попытке запушить я вижу сообщения об ошибке, которые не знаю как исправить:

md@md ~/.MINT18/lessons2 $ git st
На ветке master
Ваша ветка опережает «origin/master» на 1 коммит.
  (используйте «git push», чтобы опубликовать ваши локальные коммиты)
Изменения, которые не в индексе для коммита:
  (используйте «git add <файл>…», чтобы добавить файл в индекс)
  (используйте «git checkout -- <файл>…», чтобы отменить изменения
   в рабочем каталоге)
  (сделайте коммит или отмените изменения в неотслеживаемом или измененном содержимом в подмодулях)

	изменено:      marionette_backbone/marionette_examples/practice/chuck_norris_jokes (изменено содержимое)
	изменено:      marionette_backbone/marionette_examples/practice/example1 (изменено содержимое)
	изменено:      marionette_backbone/marionette_examples/practice/fetch_models (изменено содержимое)
	изменено:      marionette_backbone/marionette_examples/practice/simple_site (изменено содержимое)

нет изменений добавленных для коммита
(используйте «git add» и/или «git commit -a»)
md@md ~/.MINT18/lessons2 $ git add . && git ci -m 'n'
На ветке master
Ваша ветка опережает «origin/master» на 1 коммит.
  (используйте «git push», чтобы опубликовать ваши локальные коммиты)
Изменения, которые не в индексе для коммита:
	изменено:      marionette_backbone/marionette_examples/practice/chuck_norris_jokes (изменено содержимое)
	изменено:      marionette_backbone/marionette_examples/practice/example1 (изменено содержимое)
	изменено:      marionette_backbone/marionette_examples/practice/fetch_models (изменено содержимое)
	изменено:      marionette_backbone/marionette_examples/practice/simple_site (изменено содержимое)

нет изменений добавленных для коммита
md@md ~/.MINT18/lessons2 $ git push
warning: push.default не установлен; его неявное значение было изменено в Git версии 2.0 с «matching» на «simple». Чтобы прекратить вывод этого сообщения и сохранить старое поведение, используйте:

  git config --global push.default matching

Чтобы прекратить вывод этого сообщения и использовать новое поведение, используйте:

  git config --global push.default simple

Когда push.default установлено в «matching», git будет отправлять изменения локальных веток в существующие внешние ветки с таким же именем.

Начиная с Git версии 2.0, по умолчанию используется более консервативное поведение «simple», которое отправляет изменения текущей ветки в соответствующую внешнюю ветку, из которой «git pull» забирает изменения.

Смотрите «git help config» и ищите «push.default» для дополнительной информации.
(режим «simple» появился в Git версии 1.7.11. Используйте похожий режим «current» вместо «simple», если вы иногда используете старые версии Git)

Username for 'https://github.com': xxx
Password for 'https://xxx@github.com': 
Подсчет объектов: 56, готово.
Delta compression using up to 4 threads.
Сжатие объектов: 100% (53/53), готово.
Запись объектов: 100% (56/56), 11.42 KiB | 0 bytes/s, готово.
Total 56 (delta 16), reused 0 (delta 0)
remote: Resolving deltas: 100% (16/16), completed with 7 local objects.
remote: 
remote: GitHub found 3 vulnerabilities on xxx/lessons2's default branch (3 moderate). To find out more, visit:
remote:      https://github.com/xxx/lessons2/network/alerts
remote: 
To https://github.com/xxx/lessons2.git
   d827749..6b7d0d7  master -> master
md@md ~/.MINT18/lessons2 $ git st
На ветке master
Ваша ветка обновлена в соответствии с «origin/master».
Изменения, которые не в индексе для коммита:
  (используйте «git add <файл>…», чтобы добавить файл в индекс)
  (используйте «git checkout -- <файл>…», чтобы отменить изменения
   в рабочем каталоге)
  (сделайте коммит или отмените изменения в неотслеживаемом или измененном содержимом в подмодулях)

	изменено:      marionette_backbone/marionette_examples/practice/chuck_norris_jokes (изменено содержимое)
	изменено:      marionette_backbone/marionette_examples/practice/example1 (изменено содержимое)
	изменено:      marionette_backbone/marionette_examples/practice/fetch_models (изменено содержимое)
	изменено:      marionette_backbone/marionette_examples/practice/simple_site (изменено содержимое)

нет изменений добавленных для коммита
(используйте «git add» и/или «git commit -a»)
md@md ~/.MINT18/lessons2 $ 

пробовал сделать git pull, не помогло

 ,

prozaik
()

как обработать ответ сервера со статусом 400?

у меня вопрос по angularJS. в нём очень мало конкретики, но меня устроит телепатический ответ

использую сервис $http для отправки запроса на сервер. CORS налажен. если я отправляю нужные серверу ….some.data…, то сервер возвращает статс 200 и выполнение переходит в block 1.

проблема в том, что если я отправляю неправильные ….some.data…, то сервер возвращает статус 400 и выполнение вообще не переходит ни в один из указанных блоков

есть ли способ этого избежать? мне нужно сделать так что, если я отправляю неправильные ….some.data…, то ошибка отлавливалась бы каким-нибудь блоком

$http.post(API_URL + 'auth/logpass/login', { ....some.data... }).
then(function success(response) {
  console.log('block 0')
  if (response.status === 200) {
    console.log('block 1')
  } else {
    console.log('block 2')
  }
},
function(response) {
  console.log('block 3')
})
.catch(function(response) {
  console.log('block 4')
})
.finally(function() {
  console.log('block 5')
});

 , ,

prozaik
()

Как повторно мержить ветку?

Я на localhost создаю feature-ветку, работаю в ней, затем отправляю в гитлаб и делаю из неё merge request в develop. Затем сам же принимаю этот merge request. При этом ставлю галочку в пункте «удалить ветку из гитблаба после мерджа».

Затем на localhost вношу некоторые изменения в этой же ветке и снова отправляю её в гитлаб. но в этом случае в тот момент когда я принимаю merge request гитлаб выводит сообщения о конфликтах.

Скажите пожалуйста, можно ли этого избежать(конфликтов)? Я ведь когда принимал первый merge request специально и удалил ветку после принятия чтобы была возможность второй раз её принять.

 ,

prozaik
()

почему не определён экземпляр браузера?

есть скрипт, который парсит блог. блог состоит из списка статей и внутренних страниц. соответственно парсер имеет два уровня:

  1. парсинг списка страниц
  2. парсинг содержимого детальной страницы

на втором уровне у меня вываливается ошибка о том, что переменная browser равно undefined. поэтому

await browser.newPage();

для внутренних страниц не срабатывает. помогите пожалуйста понять что нужно исправить чтобы заработало.

const puppeteer = require('puppeteer');
const fs = require('fs');

let firstPageNum = null;
let lastPageNum = null;


const scrape = async () => {
	const allData = [];

    const browser = await puppeteer.launch();
    const page = await browser.newPage();			
    await page.goto('https://pycoder.ru/tags/?tag=python&page=1');

    const result_ = await page.evaluate(() => {
        const firstPageLink = parseInt(document.querySelector('.page-link:first-child').getAttribute('href').slice(-1), 10);
        const lastPageLink = parseInt(document.querySelectorAll('.page-link')[2].getAttribute('href').slice(-1), 10);
        return {
        	firstPageLink,
        	lastPageLink,
        }
    });

    firstPageNum = result_.firstPageLink;
    lastPageNum = result_.lastPageLink;
    browser.close();

    for(let pageNum = firstPageNum; pageNum <= lastPageNum; pageNum++) {
	    const browser = await puppeteer.launch({devtools: true});
	    const page = await browser.newPage();			
	    await page.goto('https://pycoder.ru/tags/?tag=python&page=' + pageNum);

	    const result = await page.evaluate(() => {
	        let data = [];
	        let elements = document.querySelectorAll('.post');

            debugger; 

	        elements.forEach(element => {
	            let linkDetails = element.querySelector('.post_link_next').getAttribute('href');

                let scrapeInerPage = async (linkDetails) => {
                    await browser.newPage();
                    await pageInner.goto(linkDetails);

                    title = element.querySelector('.blog-main h2').innerHTML;
                    date = element.querySelector('.blog-main p.meta').innerHTML;

                    pageInner.close(); 

                    return {
                        title: title,
                        date: date,
                    };                 
                }                

		    	scrapeInerPage(linkDetails).then(res => {
                    data.push('helloWorld');  
                    // data.push({pageInner.title, pageInner.date});
                    return data;
                }).catch(function (err) {
                     console.log("Promise Rejected", err);
                });       
	        });
	    });

	    allData.push(...result);
        // allData.push(...result);
	    // browser.close();
    }

	return allData;
};


scrape().then((results) => {
    console.log(results);
	fs.writeFile('./results.json', JSON.stringify(results), err => err ? console.log(err): null);    
}).catch(function (err) {
     console.log("Promise Rejected2", err);
}); 

кода много, но ошибка конкретно здесь:

                let scrapeInerPage = async (linkDetails) => {
                    await browser.newPage();
                    await pageInner.goto(linkDetails);

 ,

prozaik
()

что занимает оперативную память?

помогите пожалуйста понять какие процессы могут отнимать почти 2 гига оперативной памяти. я закрыл хром с делал следующие скриншоты:

https://i.yapx.ru/GYOVy.png

https://i.yapx.ru/GYOV0.png

https://i.yapx.ru/GYOV3.png

https://i.yapx.ru/GYOV6.png

я вижу, что cinnamon использует приблизительно 500 мегабайт. ну ок, но остальное это всё мелочь. как так получается, что в итоге занято почти 2 гига? где попробовать поискать причину?

 ,

prozaik
()

Почему не вставляются данные в таблицу?

есть скрипт, который использует sqlAlchemy и sqlite3. он отрабатывает без проблем: https://github.com/zlodiak/sql_alchemy_sqlite/blob/master/index.py

есть другой похожий скрипт, который использует sqlAlchemy и postgresql и он не отрабатывает(таблица создаётся, но она пустая):

import random
from sqlalchemy import create_engine, Table, MetaData, select, Column, String, Integer
from sqlalchemy.sql import and_, or_, not_
import psycopg2

engine = create_engine('postgresql://alchemy_user:qwerty@localhost:5432/db_alchemy')
connection = engine.connect()
metadata = MetaData()

quotes = Table('quotes', metadata,
    Column('id', Integer, primary_key=True),
    Column('text', Integer, nullable=False),
    Column('weight', Integer, nullable=False)
)
metadata.create_all(engine)


quotes_json = []
with open("text.txt") as file_handler:
    for line in file_handler:
        quotes_json.append({
            'text': line,
            'weight': random.randint(1, 10),
        })
connection.execute(quotes.insert(), quotes_json)


s = select([quotes]).where(and_(quotes.c.weight > 3, quotes.c.weight < 8))
result = connection.execute(s)
for row in result:
    print(row['id'], row['text'][:20] + '...', row['weight'])

сообщение об ошибке следующее:

(simple_pg) md@md ~/.MINT18/code/python/alchemy/simple_pg $ python index.py
Traceback (most recent call last):
  File "/home/md/.local/share/virtualenvs/simple_pg-epaYC0ys/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1225, in _execute_context
    self.dialect.do_executemany(
  File "/home/md/.local/share/virtualenvs/simple_pg-epaYC0ys/lib/python3.8/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py", line 854, in do_executemany
    cursor.executemany(statement, parameters)
psycopg2.errors.InvalidTextRepresentation: invalid input syntax for integer: "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. 
"
LINE 1: INSERT INTO quotes (text, weight) VALUES ('Sed ut perspiciat...
                                                  ^


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "index.py", line 25, in <module>
    connection.execute(quotes.insert(), quotes_json)
  File "/home/md/.local/share/virtualenvs/simple_pg-epaYC0ys/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 982, in execute
    return meth(self, multiparams, params)
  File "/home/md/.local/share/virtualenvs/simple_pg-epaYC0ys/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 293, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/home/md/.local/share/virtualenvs/simple_pg-epaYC0ys/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1095, in _execute_clauseelement
    ret = self._execute_context(
  File "/home/md/.local/share/virtualenvs/simple_pg-epaYC0ys/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1249, in _execute_context
    self._handle_dbapi_exception(
  File "/home/md/.local/share/virtualenvs/simple_pg-epaYC0ys/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1476, in _handle_dbapi_exception
    util.raise_from_cause(sqlalchemy_exception, exc_info)
  File "/home/md/.local/share/virtualenvs/simple_pg-epaYC0ys/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 398, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/home/md/.local/share/virtualenvs/simple_pg-epaYC0ys/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 152, in reraise
    raise value.with_traceback(tb)
  File "/home/md/.local/share/virtualenvs/simple_pg-epaYC0ys/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1225, in _execute_context
    self.dialect.do_executemany(
  File "/home/md/.local/share/virtualenvs/simple_pg-epaYC0ys/lib/python3.8/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py", line 854, in do_executemany
    cursor.executemany(statement, parameters)
sqlalchemy.exc.DataError: (psycopg2.errors.InvalidTextRepresentation) invalid input syntax for integer: "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. 
"
LINE 1: INSERT INTO quotes (text, weight) VALUES ('Sed ut perspiciat...
                                                  ^

[SQL: INSERT INTO quotes (text, weight) VALUES (%(text)s, %(weight)s)]
[parameters: ({'text': 'Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. \n', 'weight': 8}, {'text': 'Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. \n', 'weight': 3}, {'text': 'Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. \n', 'weight': 10}, {'text': 'Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur?\n', 'weight': 5}, {'text': 'Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?\n', 'weight': 5}, {'text': 'At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. \n', 'weight': 6}, {'text': 'Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. \n', 'weight': 7}, {'text': 'Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. \n', 'weight': 9}, {'text': 'Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.', 'weight': 4})]
(Background on this error at: http://sqlalche.me/e/9h9h)

я думал, что sqlAlchemy именно для того и существует чтобы скрывать особенности различных БД и работать с ними через единый интерфейс, а оказалось, что это не так. объясните пожалуйста почему я дурак?

 , , ,

prozaik
()

Почему блокируется краулер?

помогите пожалуйста понять причину, по которой сайт avito блокирует мой парсер.

я использовал proxy, притворялся через user-agent, включал VPN, отключал куки, использовал искусственные задержки для каждой новой странички. но в результате после нескольких успешных парсингов, avito начал блокировать моего паука.

мне хотелось бы понять причину, с которой нужно бороться. вот лог:

(scrapy_3) md@md ~/.MINT18/code/python/parsers/scrapy_3/zaz $ scrapy crawl zaz -o zaz.json
2020-02-11 23:29:19 [scrapy.utils.log] INFO: Scrapy 1.8.0 started (bot: zaz)
2020-02-11 23:29:19 [scrapy.utils.log] INFO: Versions: lxml 4.5.0.0, libxml2 2.9.10, cssselect 1.1.0, parsel 1.5.2, w3lib 1.21.0, Twisted 19.10.0, Python 3.8.1 (default, Dec 31 2019, 18:44:59) - [GCC 5.4.0 20160609], pyOpenSSL 19.1.0 (OpenSSL 1.1.1d  10 Sep 2019), cryptography 2.8, Platform Linux-4.10.0-38-generic-x86_64-with-glibc2.17
2020-02-11 23:29:19 [scrapy.crawler] INFO: Overridden settings: {'BOT_NAME': 'zaz', 'DOWNLOAD_DELAY': 0.1, 'EDITOR': 'subl', 'FEED_EXPORT_ENCODING': 'utf-8', 'FEED_FORMAT': 'json', 'FEED_URI': 'zaz.json', 'NEWSPIDER_MODULE': 'zaz.spiders', 'SPIDER_MODULES': ['zaz.spiders'], 'USER_AGENT': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0'}
2020-02-11 23:29:19 [scrapy.extensions.telnet] INFO: Telnet Password: 4d67392473cfbe43
2020-02-11 23:29:19 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.corestats.CoreStats',
 'scrapy.extensions.telnet.TelnetConsole',
 'scrapy.extensions.memusage.MemoryUsage',
 'scrapy.extensions.feedexport.FeedExporter',
 'scrapy.extensions.logstats.LogStats']
2020-02-11 23:29:19 [scrapy.middleware] INFO: Enabled downloader middlewares:
['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
 'scrapy.downloadermiddlewares.retry.RetryMiddleware',
 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
 'scrapy.downloadermiddlewares.stats.DownloaderStats']
2020-02-11 23:29:19 [scrapy.middleware] INFO: Enabled spider middlewares:
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
 'scrapy.spidermiddlewares.referer.RefererMiddleware',
 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
 'scrapy.spidermiddlewares.depth.DepthMiddleware']
2020-02-11 23:29:19 [scrapy.middleware] INFO: Enabled item pipelines:
[]
2020-02-11 23:29:19 [scrapy.core.engine] INFO: Spider opened
2020-02-11 23:29:19 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2020-02-11 23:29:19 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
2020-02-11 23:29:20 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.avito.ru/rossiya/avtomobili?q=%D0%B7%D0%B0%D0%BF%D0%BE%D1%80%D0%BE%D0%B6%D0%B5%D1%86> (referer: None)
2020-02-11 23:29:20 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://www.avito.ru/penza/avtomobili/zaz_965_zaporozhets_1966_1780869575> (failed 1 times): Connection was refused by other side: 111: Connection refused.
2020-02-11 23:29:21 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://www.avito.ru/mariy_el_sovetskiy/avtomobili/zaz_965_zaporozhets_1969_1248912421> (failed 1 times): Connection was refused by other side: 111: Connection refused.
2020-02-11 23:29:21 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://www.avito.ru/sankt-peterburg/avtomobili/zaz_968_zaporozhets_1990_1828795956> (failed 1 times): Connection was refused by other side: 111: Connection refused.
2020-02-11 23:29:21 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://www.avito.ru/gorki-10/avtomobili/zaz_968_zaporozhets_1993_697246919> (failed 1 times): Connection was refused by other side: 111: Connection refused.
...
...
...
...
...
...
...
twisted.internet.error.ConnectionRefusedError: Connection was refused by other side: 111: Connection refused.
2020-02-11 23:29:39 [scrapy.downloadermiddlewares.retry] DEBUG: Gave up retrying <GET https://www.avito.ru/voronezh/avtomobili/zaz_968_zaporozhets_1993_1836536727> (failed 3 times): Connection was refused by other side: 111: Connection refused.
2020-02-11 23:29:39 [scrapy.core.scraper] ERROR: Error downloading <GET https://www.avito.ru/voronezh/avtomobili/zaz_968_zaporozhets_1993_1836536727>
Traceback (most recent call last):
  File "/home/md/.local/share/virtualenvs/scrapy_3-V2DXPfVH/lib/python3.8/site-packages/scrapy/core/downloader/middleware.py", line 44, in process_request
    defer.returnValue((yield download_func(request=request, spider=spider)))
twisted.internet.error.ConnectionRefusedError: Connection was refused by other side: 111: Connection refused.
2020-02-11 23:29:39 [scrapy.core.engine] INFO: Closing spider (finished)
2020-02-11 23:29:39 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/exception_count': 150,
 'downloader/exception_type_count/twisted.internet.error.ConnectionRefusedError': 150,
 'downloader/request_bytes': 114788,
 'downloader/request_count': 151,
 'downloader/request_method_count/GET': 151,
 'downloader/response_bytes': 161798,
 'downloader/response_count': 1,
 'downloader/response_status_count/200': 1,
 'elapsed_time_seconds': 19.726251,
 'finish_reason': 'finished',
 'finish_time': datetime.datetime(2020, 2, 11, 20, 29, 39, 464574),
 'log_count/DEBUG': 151,
 'log_count/ERROR': 50,
 'log_count/INFO': 10,
 'memusage/max': 52711424,
 'memusage/startup': 52711424,
 'request_depth_max': 1,
 'response_received_count': 1,
 'retry/count': 100,
 'retry/max_reached': 50,
 'retry/reason_count/twisted.internet.error.ConnectionRefusedError': 100,
 'scheduler/dequeued': 151,
 'scheduler/dequeued/memory': 151,
 'scheduler/enqueued': 151,
 'scheduler/enqueued/memory': 151,
 'start_time': datetime.datetime(2020, 2, 11, 20, 29, 19, 738323)}
2020-02-11 23:29:39 [scrapy.core.engine] INFO: Spider closed (finished)

если нужно, то вот исходный код: https://github.com/zlodiak/avito_zaz/blob/master/zaz/zaz/spiders/zaz_spider.py

 , ,

prozaik
()

почему ВК перестал отвечать парсеру?

был у меня скриптик на питоне, который работал и возвращал результаты в виде html с набором фамилий:

import requests


headers = {
    'User-agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0)'
}

response = requests.get('https://vk.com/people/Козлов', headers=headers, proxies={"http":"http://10.10.1.10:3128"})
    
if response.status_code == 200:
    print('ok', response.text)
else:
    print('fail')

но после нескольких запусков стал возвращаться html без набора фамилий

<div id="no_results" class="no_rows">Ваш запрос не дал результатов<br> Возможно, Вы искали   <a hr

возможно, ВК как-то защищается от большого количества однотипных запросов с одного IP. Подскажите пожалуйста как это обойти. Как видите, я использовал headers и proxies

или вообще причину того, что скрипт перестал работать нужно искать в другом?

 , ,

prozaik
()

как установить tkinter?

помогите пожалуйста установить tkinter.

в python3 я использую библиотеку matplotlib, при помощи неё рисую график, в результате создаётся файл, я его открываю и смотрю без проблем. но я хотел бы чтобы этот график выводился на экране сразу. для этого нужно подключить tkinter

я делаю следующее:

(transaction1) md@md ~/.MINT18/code/python/transaction1 $ sudo apt-get install python-tk
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Предлагаемые пакеты:
  tix python-tk-dbg
Следующие НОВЫЕ пакеты будут установлены:
  python-tk
Обновлено 0 пакетов, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 13 пакетов не обновлено.
Необходимо скачать 26,3 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 95,2 kB.
Пол:1 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 python-tk amd64 2.7.12-1~16.04 [26,3 kB]
Получено 26,3 kB за 0с (84,0 kB/s)  
Выбор ранее не выбранного пакета python-tk.
(Чтение базы данных … на данный момент установлено 218287 файлов и каталогов.)
Подготовка к распаковке …/python-tk_2.7.12-1~16.04_amd64.deb …
Распаковывается python-tk (2.7.12-1~16.04) …
Настраивается пакет python-tk (2.7.12-1~16.04) …
(transaction1) md@md ~/.MINT18/code/python/transaction1 $ sudo apt-get install python-tk
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Уже установлен пакет python-tk самой новой версии (2.7.12-1~16.04).
Обновлено 0 пакетов, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 13 пакетов не обновлено.
(transaction1) md@md ~/.MINT18/code/python/transaction1 $ whereis python-tk
python-tk:
(transaction1) md@md ~/.MINT18/code/python/transaction1 $ which python-tk

судя по всему tkinter установился. теперь я пробую импортировать его в скрипт так:

import tkinter

но после запуска скрипта получаю следующую ошибку:

(transaction1) md@md ~/.MINT18/code/python/transaction1 $ python index3.py
Traceback (most recent call last):
  File "index3.py", line 3, in <module>
    import tkinter
ModuleNotFoundError: No module named 'tkinter'

ещё я пробовал делать так:

(transaction1) md@md ~/.MINT18/code/python/transaction1 $ pipenv install tkinter
Installing tkinter…
Adding tkinter to Pipfile's [packages]…
✔ Installation Succeeded 
Pipfile.lock (a21357) out of date, updating to (757436)…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
✘ Locking Failed! 
[pipenv.exceptions.ResolutionFailure]:   File "/home/md/.local/lib/python3.5/site-packages/pipenv/resolver.py", line 61, in resolve
[pipenv.exceptions.ResolutionFailure]:       return resolve_deps(
[pipenv.exceptions.ResolutionFailure]:   File "/home/md/.local/lib/python3.5/site-packages/pipenv/utils.py", line 718, in resolve_deps
[pipenv.exceptions.ResolutionFailure]:       resolved_tree, hashes, markers_lookup, resolver = actually_resolve_deps(
[pipenv.exceptions.ResolutionFailure]:   File "/home/md/.local/lib/python3.5/site-packages/pipenv/utils.py", line 480, in actually_resolve_deps
[pipenv.exceptions.ResolutionFailure]:       resolved_tree = resolver.resolve()
[pipenv.exceptions.ResolutionFailure]:   File "/home/md/.local/lib/python3.5/site-packages/pipenv/utils.py", line 395, in resolve
[pipenv.exceptions.ResolutionFailure]:       raise ResolutionFailure(message=str(e))
[pipenv.exceptions.ResolutionFailure]:       pipenv.exceptions.ResolutionFailure: ERROR: ERROR: Could not find a version that matches threading
[pipenv.exceptions.ResolutionFailure]:       No versions found
[pipenv.exceptions.ResolutionFailure]: Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
  First try clearing your dependency cache with $ pipenv lock --clear, then try the original command again.
 Alternatively, you can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.
  Hint: try $ pipenv lock --pre if it is a pre-release dependency.
ERROR: ERROR: Could not find a version that matches threading
No versions found
Was https://pypi.org/simple reachable?
[pipenv.exceptions.ResolutionFailure]:       return resolve_deps(
[pipenv.exceptions.ResolutionFailure]:   File "/home/md/.local/lib/python3.5/site-packages/pipenv/utils.py", line 718, in resolve_deps
[pipenv.exceptions.ResolutionFailure]:       resolved_tree, hashes, markers_lookup, resolver = actually_resolve_deps(
[pipenv.exceptions.ResolutionFailure]:   File "/home/md/.local/lib/python3.5/site-packages/pipenv/utils.py", line 480, in actually_resolve_deps
[pipenv.exceptions.ResolutionFailure]:       resolved_tree = resolver.resolve()
[pipenv.exceptions.ResolutionFailure]:   File "/home/md/.local/lib/python3.5/site-packages/pipenv/utils.py", line 395, in resolve
[pipenv.exceptions.ResolutionFailure]:       raise ResolutionFailure(message=str(e))
[pipenv.exceptions.ResolutionFailure]:       pipenv.exceptions.ResolutionFailure: ERROR: ERROR: Could not find a version that matches threading
[pipenv.exceptions.ResolutionFailure]:       No versions found
[pipenv.exceptions.ResolutionFailure]: Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
  First try clearing your dependency cache with $ pipenv lock --clear, then try the original command again.
 Alternatively, you can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.
  Hint: try $ pipenv lock --pre if it is a pre-release dependency.
ERROR: ERROR: Could not find a version that matches threading
No versions found
Was https://pypi.org/simple reachable?
(transaction1) md@md ~/.MINT18/code/python/transaction1 $ pipenv graph
matplotlib==3.1.2
  - cycler [required: >=0.10, installed: 0.10.0]
    - six [required: Any, installed: 1.13.0]
  - kiwisolver [required: >=1.0.1, installed: 1.1.0]
    - setuptools [required: Any, installed: 42.0.2]
  - numpy [required: >=1.11, installed: 1.17.4]
  - pyparsing [required: >=2.0.1,!=2.1.6,!=2.1.2,!=2.0.4, installed: 2.4.5]
  - python-dateutil [required: >=2.1, installed: 2.8.1]
    - six [required: >=1.5, installed: 1.13.0]
pandas==0.25.3
  - numpy [required: >=1.13.3, installed: 1.17.4]
  - python-dateutil [required: >=2.6.1, installed: 2.8.1]
    - six [required: >=1.5, installed: 1.13.0]
  - pytz [required: >=2017.2, installed: 2019.3]
psycopg2==2.8.4
redis==3.3.11

 , ,

prozaik
()

можно ли использовать только redis?

обычно redis используется как кеш к основной БД(реляционной). скажите, является ли хорошей практикой использовать только redis? то есть хранить в ней и критически важные данные, и не критически важные?

ведь есть же в redis команда bgsave, её можно пинать после каждой отправки данных

кроме того можно настроить конфиг redis так чтобы он периодически сохранял данные оперативной памяти на диск

разве этого всего недостаточно чтобы отказаться от «настоящей» БД типа postgres?

 

prozaik
()

как redis хранит данные всех пользователей?

решил научиться использовать redis, но пока не очень хорошо представляю общую картину. пометьте пожалуйста пункты, в которых я ошибаюсь:

1. redis это БД типа ключ-значение, которая живёт в оперативной памяти сервера. 
2. в ней хранятся некритично важные данные
3. например на сервере1 есть админка, написанная на питоне. на сервере2 есть postgres database. на сервере3 есть redis
4. хеш пароля и логины хранятся в postgres
5. всякие визуальные настройки и номера открытых пользователями админки вкладок хранятся в redis
6. для postgres и redis код админки отправляет разные типы запросов. то есть не бывает так, что через какой-нибудь прокси отправлятеся sql-запрос, а прокси уже сам решает отправить его как sql-запрос в postgres или как nosql-запрос в redis.

мне непонятна ситуация когда redis-сервер существует один и соответственно оперативная память у него одна. и при этом пользователей админки, скажем, миллион. как они будут делить оперативную память единственного сервера? ведь если каждому пользователю нужен гигабайт, то сервер не может предоставить миллион гигабайт оперативной памяти

 

prozaik
()

Как войти под пользователем в postgresql?

подскажите пожалуйста как залогиниться в postgresql под новым пользователем.

Я установил postgres9. далее работаю с ним через командную строку. я хотел бы создать пользователя postgres и работать под ним, а не под суперпользователем. Для этого я зашел в postgres под суперпользователем:

sudo -u postgres psql

и создал нового пользователя, новую БД, дал права пользователю на эту БД:

postgres=# CREATE USER user1 WITH PASSWORD 'qwerty1';
CREATE ROLE
postgres=# CREATE DATABASE database1;
CREATE DATABASE
postgres=# GRANT ALL PRIVILEGES ON DATABASE database1 to user1;
GRANT

результат:

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 database1 | postgres | UTF8     | ru_RU.UTF-8 | ru_RU.UTF-8 | =Tc/postgres         +
           |          |          |             |             | postgres=CTc/postgres+
           |          |          |             |             | user1=CTc/postgres

затем в соответствии с документацией я добавил в файл

/etc/postgresql/9.5/main/pg_hba.conf

строку:

local database1 user1 trust

и перезапустил postgreql чтобы изменения вступили в силу:

(ven) md@md ~/.MINT18/code/python/project0/ven/bin $ sudo service postgresql restart
(ven) md@md ~/.MINT18/code/python/project0/ven/bin $ sudo service postgresql start
(ven) md@md ~/.MINT18/code/python/project0/ven/bin $ psql -U user1 database1
psql: FATAL:  Peer authentication failed for user "user1"

как видите, войти не получилось. а хотелось бы…

 ,

prozaik
()

Как установить вирт.среду с python3.8?

помогите пожалуйста установить virtualenv с python3.8 внутри.

в домашнем каталоге, в .bashrc у меня есть такой алиас:

alias python3=python3.8

я пытаюсь использовать virtualenv так:

md@md ~/.MINT18/code/python/project0 $ python -V
Python 2.7.12
md@md ~/.MINT18/code/python/project0 $ python3 -V
Python 3.8.0
md@md ~/.MINT18/code/python/project0 $ virtualenv -p /usr/bin/python3 venv
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/md/.MINT18/code/python/project0/venv/bin/python3
Also creating executable in /home/md/.MINT18/code/python/project0/venv/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
md@md ~/.MINT18/code/python/project0 $ 
md@md ~/.MINT18/code/python/project0/venv/bin $ ls
activate  activate.csh  activate.fish  activate_this.py  easy_install  easy_install-3.5  pip  pip3  pip3.5  python  python3  python3.5  python-config  wheel
md@md ~/.MINT18/code/python/project0/venv/bin $ source activate
(venv) md@md ~/.MINT18/code/python/project0/venv/bin $ python -V
Python 3.5.2
(venv) md@md ~/.MINT18/code/python/project0/venv/bin $ python3 -V
Python 3.8.0

насколько я понимаю, у меня должна установиться вирт.среда с версией питона3.8 . но так не происходит, почему-то внутри virtualenv используется версия 3.5

ещё пробовал так, но тоже неудачно:

md@md ~/.MINT18/code/python/project0 $ virtualenv -p /usr/bin/python3.8 venv
Running virtualenv with interpreter /usr/bin/python3.8
Using base prefix '/usr'
/usr/lib/python3/dist-packages/virtualenv.py:1082: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
  import imp
New python executable in /home/md/.MINT18/code/python/project0/venv/bin/python3.8
Also creating executable in /home/md/.MINT18/code/python/project0/venv/bin/python
Installing setuptools, pkg_resources, pip, wheel...
  Complete output from command /home/md/.MINT18/cod...0/venv/bin/python3.8 - setuptools pkg_resources pip wheel:
  Exception:
Traceback (most recent call last):
  File "/usr/share/python-wheels/pip-8.1.1-py2.py3-none-any.whl/pip/basecommand.py", line 209, in main
    status = self.run(options, args)
  File "/usr/share/python-wheels/pip-8.1.1-py2.py3-none-any.whl/pip/commands/install.py", line 267, in run
    with self._build_session(options) as session:
  File "/usr/share/python-wheels/pip-8.1.1-py2.py3-none-any.whl/pip/basecommand.py", line 66, in _build_session
    session = PipSession(
  File "/usr/share/python-wheels/pip-8.1.1-py2.py3-none-any.whl/pip/download.py", line 321, in __init__
    self.headers["User-Agent"] = user_agent()
  File "/usr/share/python-wheels/pip-8.1.1-py2.py3-none-any.whl/pip/download.py", line 93, in user_agent
    zip(["name", "version", "id"], platform.linux_distribution()),
AttributeError: module 'platform' has no attribute 'linux_distribution'
Traceback (most recent call last):
  File "<stdin>", line 24, in <module>
  File "/usr/share/python-wheels/pip-8.1.1-py2.py3-none-any.whl/pip/__init__.py", line 217, in main
  File "/usr/share/python-wheels/pip-8.1.1-py2.py3-none-any.whl/pip/basecommand.py", line 242, in main
  File "/usr/share/python-wheels/pip-8.1.1-py2.py3-none-any.whl/pip/basecommand.py", line 66, in _build_session
  File "/usr/share/python-wheels/pip-8.1.1-py2.py3-none-any.whl/pip/download.py", line 321, in __init__
  File "/usr/share/python-wheels/pip-8.1.1-py2.py3-none-any.whl/pip/download.py", line 93, in user_agent
AttributeError: module 'platform' has no attribute 'linux_distribution'
----------------------------------------
...Installing setuptools, pkg_resources, pip, wheel...done.
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/virtualenv.py", line 2363, in <module>
    main()
  File "/usr/lib/python3/dist-packages/virtualenv.py", line 709, in main
    create_environment(home_dir,
  File "/usr/lib/python3/dist-packages/virtualenv.py", line 984, in create_environment
    install_wheel(
  File "/usr/lib/python3/dist-packages/virtualenv.py", line 918, in install_wheel
    call_subprocess(cmd, show_stdout=False, extra_env=env, stdin=SCRIPT)
  File "/usr/lib/python3/dist-packages/virtualenv.py", line 810, in call_subprocess
    raise OSError(
OSError: Command /home/md/.MINT18/cod...0/venv/bin/python3.8 - setuptools pkg_resources pip wheel failed with error code 1
md@md ~/.MINT18/code/python/project0 $ 
md@md ~/.MINT18/code/python/project0/venv/bin $ ls
python  python3  python3.8
md@md ~/.MINT18/code/python/project0/venv/bin $ source activate
bash: activate: Нет такого файла или каталога

а вообще в моей системе есть такие версии питона:

python2           
python2.7         
python3           
python3.5         
python3.5m        
python3.8

 , ,

prozaik
()

Как установить aiohttp?

У меня какая-то дичь творится с PIP. Кажется, я его правильно установил, но проблема в том, что не получается установить модуль aiohttp. Вот что пишет консоль:

md@md /var/lib $ sudo apt-get install python3-pip
sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700
[sudo] password for md: 
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Следующие пакеты устанавливались автоматически и больше не требуются:
  python-colorama python-distlib python-html5lib
Для их удаления используйте «apt-get autoremove».
Рекомендуемые пакеты:
  python3-wheel
Следующие НОВЫЕ пакеты будут установлены:
  python3-pip
Обновлено 0 пакетов, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 24 пакетов не обновлено.
Необходимо скачать 0 B/80,3 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 447 kB.
Выбор ранее не выбранного пакета python3-pip.
(Чтение базы данных … на данный момент установлено 211733 файла и каталога.)
Preparing to unpack …/python3-pip_1.5.4-1ubuntu4_all.deb ...
Unpacking python3-pip (1.5.4-1ubuntu4) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Настраивается пакет python3-pip (1.5.4-1ubuntu4) …
md@md /var/lib $ pip --version
bash: /usr/bin/pip: No such file or directory
md@md /var/lib $ pip3 --version
pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.4)
md@md /var/lib $ python -m pip install aiohttp
Traceback (most recent call last):
  File "/usr/lib/python3.7/runpy.py", line 183, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "/usr/lib/python3.7/runpy.py", line 142, in _get_module_details
    return _get_module_details(pkg_main_name, error)
  File "/usr/lib/python3.7/runpy.py", line 109, in _get_module_details
    __import__(pkg_name)
  File "/usr/lib/python3/dist-packages/pip/__init__.py", line 59, in <module>
    from pip.log import logger
  File "/usr/lib/python3/dist-packages/pip/log.py", line 9, in <module>
    import colorama, pkg_resources
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 668, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 638, in _load_backward_compatible
  File "/usr/share/python-wheels/setuptools-3.3-py2.py3-none-any.whl/pkg_resources.py", line 1479, in <module>
    register_loader_type(importlib_bootstrap.SourceFileLoader, DefaultProvider)
AttributeError: module 'importlib._bootstrap' has no attribute 'SourceFileLoader'
md@md /var/lib $ python --version
Python 3.7.0
md@md /var/lib $ python3 --version
Python 3.4.3
md@md /var/lib $ 

Помогите пожалуйста советом

 , ,

prozaik
()

правильно ли я понимаю мультизадачность?

весь день пытался разобраться с распараллеливанием решения задач в python и целостной картины так и не удалось сложить. помогите пожалуйста пинками в нужных направлениях

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

укажите пожалуйста на дичь:

[code]

  1. реальная мультипроцессорномть использует для каждого процесса отдельное ядро
  2. в python не существует реальной многопроцессорности, а используется модуль multiprocessing. который выполняет операции в различных процессах, но имеет каналы коммуникации между этими процессами.
  3. при этом количество ядер, задействованных в вычислениях контролируется ОС и python на это повлиять не может
  4. мультипоточность это когда вычисления производятся внутри процесса несколькими потоками
  5. эти потоки имеют доступ к общим ресурсам и удобную коммуникацию между собой
  6. существует набор моделей управления потоками: lock, semafor, events, etc. при их помощи потоки могут блокировать/освобождать соседние потоки.
  7. эти модели реализуют модель кооперативной многозадачности
  8. существует ещё вытесняющая многозадачность. это когда ОС(или GIL) сама решает когда переключаться между потоками
  9. в однопоточном приложении можно более эффективно работать с IObounded-операциями (например ожидание ответа http), если использовать асинхронность
  10. таким образом для повышения эффективности программы удобно использовать(в порядке убывания): мультипроцессорность(в виде модуля multipricessing), мультипоточность, асинхронность [/code]

 

prozaik
()

Как узнать используемую версию питона?

Помогите пожалуйста понять почему я вижу разные версии python через командную строку.

md@md ~/.MINT17/code/python/alien_invasion $ python -V
Python 3.7.0
md@md ~/.MINT17/code/python/alien_invasion $ python3 -V
Python 3.4.3
md@md ~/.MINT17/code/python/alien_invasion $ virtualenv -p python3.4 venv
Running virtualenv with interpreter /usr/bin/python3.4
Using base prefix '/usr'
New python executable in venv/bin/python3.4
Also creating executable in venv/bin/python
Installing setuptools, pip...done.
md@md ~/.MINT17/code/python/alien_invasion $ 
md@md ~/.MINT17/code/python/alien_invasion/venv/bin $ source activate
(venv)md@md ~/.MINT17/code/python/alien_invasion/venv/bin $ python -V
Python 3.7.0
(venv)md@md ~/.MINT17/code/python/alien_invasion/venv/bin $ python3 -V
Python 3.4.3

Как видите, команды

python -V
и
python3 -V
показывают разные версии. Причём даже когда virtualenv включен. Как такое возможно?

 ,

prozaik
()

полезны ли помидоры?

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

как думаете, метод помидора это инструмент, который действительно поможет сэкономить время и упорядочить деятельность айтишнику(программисту/админу)?

у меня сомнения в его эффективности. потому что айтишникам в профессиональной деятельности постоянно приходится иметь дело с большим потоком входящей информации. поэтому погрузиться в проблему на условные 25 минут почти нереально

автор создал метод помидора в 80-х годах, в то время темп жизни был поспокойнее

 

prozaik
()

RSS подписка на новые темы