{"id":243229,"date":"2014-11-15T03:05:03","date_gmt":"2014-11-14T23:05:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=243229"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=243229","title":{"rendered":"<span class=\"post_title\">\u0410\u043d\u0430\u043b\u0438\u0437 \u0434\u0440\u0443\u0436\u0435\u0441\u043a\u0438\u0445 \u0441\u0432\u044f\u0437\u0435\u0439 VK \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Python. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435<\/span>"},"content":{"rendered":"<div class=\"content html_format\">     \t\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 <a href=\"http:\/\/habrahabr.ru\/post\/221251\/\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u043c\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0431\u0449\u0438\u0445 \u0434\u0440\u0443\u0437\u0435\u0439 \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0433\u0440\u0430\u0444, \u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0443\u0437\u0435\u0439, \u0434\u0440\u0443\u0437\u0435\u0439 \u0434\u0440\u0443\u0437\u0435\u0439 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u044b \u0443\u0436\u0435 \u043f\u0440\u043e\u0447\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e <a href=\"http:\/\/habrahabr.ru\/post\/221251\/\">\u0441\u0442\u0430\u0442\u044c\u044e<\/a>, \u0438 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u043d\u043e\u0432\u043e. \u041f\u043e\u0434 \u0445\u0430\u0431\u0440\u0430\u043a\u0430\u0442\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438 \u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0432\u0441\u0435 id \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0435\u0433\u043a\u043e, \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0445 id \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 <a href=\"https:\/\/vk.com\/catalog.php\">\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0412\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0435<\/a>. \u041d\u0430\u0448\u0430 \u0436\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0443\u0437\u0435\u0439 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u043c\u0438 id \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0438\u0445 \u0434\u0440\u0443\u0437\u0435\u0439 \u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0441\u043a\u043e\u043b\u044c \u0443\u0433\u043e\u0434\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0433\u043b\u0443\u0431\u0438\u043d\u044b. <\/p>\n<p>  \u041a\u043e\u0434, \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u043e\u043b\u0435\u0435 \u0441\u0432\u0435\u0436\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0442\u043e\u043c \u0436\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0430 <a href=\"https:\/\/github.com\/stleon\/vk_friends\">Github<\/a>. <\/p>\n<p>  \u041a\u0430\u043a \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c:  <\/p>\n<ul>\n<li>\u0417\u0430\u0434\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u0443\u044e \u043d\u0430\u043c \u0433\u043b\u0443\u0431\u0438\u043d\u0443<\/li>\n<li>\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043b\u0438\u0431\u043e \u0442\u0435 id, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 \u0433\u043b\u0443\u0431\u0438\u043d\u0435<\/li>\n<li>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0442\u0432\u0435\u0442<\/li>\n<\/ul>\n<p>  \u0427\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c:  <\/p>\n<ul>\n<li>Python 3.4<\/li>\n<li>\u0425\u0440\u0430\u043d\u0438\u043c\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0432 \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435<\/li>\n<\/ul>\n<p>  <\/p>\n<h4>\u0417\u0430\u0434\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u0443\u044e \u043d\u0430\u043c \u0433\u043b\u0443\u0431\u0438\u043d\u0443<\/h4>\n<p>  \u0427\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u2014 \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0433\u043b\u0443\u0431\u0438\u043d\u0443 (<b>deep<\/b>), \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0432 <b>settings.py<\/b>:<\/p>\n<pre><code class=\"python\">deep = 2 # \u0442\u0430\u043a\u0430\u044f \u0441\u0442\u0440\u043e\u0447\u043a\u0430 \u0442\u0430\u043c \u0443\u0436\u0435 \u0435\u0441\u0442\u044c <\/code><\/pre>\n<p>  <b>deep<\/b> \u0440\u0430\u0432\u043d\u043e\u0435 1 \u2014 \u044d\u0442\u043e \u043d\u0430\u0448\u0438 \u0434\u0440\u0443\u0437\u044c\u044f, 2 \u2014 \u044d\u0442\u043e \u0434\u0440\u0443\u0437\u044c\u044f \u043d\u0430\u0448\u0438\u0445 \u0434\u0440\u0443\u0437\u0435\u0439 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0443\u0442 id \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u2014 \u0438\u0445 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0443\u0437\u0435\u0439. <\/p>\n<p>  \u041d\u0435 \u0441\u043f\u0435\u0448\u0438\u0442\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0433\u043b\u0443\u0431\u0438\u043d\u044b. \u041f\u0440\u0438 14 \u043c\u043e\u0438\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0440\u0443\u0437\u044c\u044f\u0445 \u0438 \u0433\u043b\u0443\u0431\u0438\u043d\u0435 \u0440\u0430\u0432\u043d\u043e\u0439 2, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043b\u044e\u0447\u0435\u0439 \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u043e 2427, \u0430 \u043f\u0440\u0438 \u0433\u043b\u0443\u0431\u0438\u043d\u0435, \u0440\u0430\u0432\u043d\u043e\u0439 3, \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u0442\u0435\u0440\u043f\u0435\u043d\u0438\u044f \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u043d\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b 223 908 \u043a\u043b\u044e\u0447\u0435\u0439. \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u0433\u0440\u0430\u0444, \u0432\u0435\u0434\u044c \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c\u0438 \u0431\u0443\u0434\u0443\u0442 \u043a\u043b\u044e\u0447\u0438, \u0430 \u0440\u0435\u0431\u0440\u0430\u043c\u0438 \u2014 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<h4>\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/h4>\n<p>  \u0414\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043d\u0430\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0443\u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/vk.com\/dev\/friends.get\">friends.get<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0432 \u0445\u0440\u0430\u043d\u0438\u043c\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435, \u0438\u043c\u0435\u044e\u0449\u0435\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u0438\u0434:<\/p>\n<pre><code class=\"javascript\">var targets = Args.targets; var all_friends = {}; var req; var parametr = &quot;&quot;; var start = 0; \/\/ \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u0446\u0435\u043b\u044f\u043c\u0438 \u0432\u044b\u043d\u0438\u043c\u0430\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u0446\u0435\u043b\u044c while(start&lt;=targets.length){     if (targets.substr(start, 1) != &quot;,&quot; && start != targets.length){         parametr = parametr + targets.substr(start, 1);     }     else {         \/\/ \u0441\u0440\u0430\u0437\u0443 \u0434\u0435\u043b\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0442\u0430\u0449\u0438\u043b\u0438 id         req = API.friends.get({&quot;user_id&quot;:parametr});         if (req) {             all_friends = all_friends + [req];         }         else {             all_friends = all_friends + [0];         }         parametr = &quot;&quot;;     }     start = start + 1; } return all_friends; <\/code><\/pre>\n<p>  \u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u043c\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432 <a href=\"https:\/\/vk.com\/editapp?id=ID\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f&amp;section=functions\">\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/a>, \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043e\u043d\u0430 \u043d\u0430 <b>VkScript<\/b>, \u043a\u0430\u043a \u0438 <b>execute<\/b>, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0435\u0441\u0442\u044c <a href=\"https:\/\/vk.com\/dev\/execute\">\u0437\u0434\u0435\u0441\u044c<\/a> \u0438 <a href=\"https:\/\/vk.com\/pages.php?o=-1&amp;p=execute\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041c\u044b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u0437 25 id, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u044f\u0442\u044b\u043c\u0438, \u0432\u044b\u043d\u0438\u043c\u0430\u0435\u043c \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 id, \u0434\u0435\u043b\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043a <b>friends.get<\/b>, \u0430 \u043d\u0443\u0436\u043d\u0430\u044f \u043d\u0430\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435, \u0433\u0434\u0435 \u043a\u043b\u044e\u0447\u0438 \u2014 \u044d\u0442\u043e id, \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0443\u0437\u0435\u0439 \u0434\u0430\u043d\u043d\u043e\u0433\u043e id.<\/p>\n<p>  \u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043c\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043c \u0445\u0440\u0430\u043d\u0438\u043c\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0443\u0437\u0435\u0439 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, id \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u043d \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445. \u0421\u043f\u0438\u0441\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0431\u0438\u0442 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u0435\u0439 (N\/25 \u2014 \u044d\u0442\u043e \u0438 \u0447\u0438\u0441\u043b\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432), \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u044d\u0442\u043e \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043a API \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435. <\/p>\n<h4>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u0442\u0432\u0435\u0442\u0430<\/h4>\n<p>  \u0412\u0441\u044e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"python\">{1:(0, 2, 3, 4), 2: (0, 1, 3, 4), 3: (0, 1, 2)} <\/code><\/pre>\n<p>  \u041a\u043b\u044e\u0447\u0438 1, 2 \u0438 3 \u0431\u044b\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u043f\u0440\u0438 \u0433\u043b\u0443\u0431\u0438\u043d\u0435, \u0440\u0430\u0432\u043d\u043e\u0439 1. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0438 \u0431\u044b\u043b\u0438 \u0432\u0441\u0435 \u0434\u0440\u0443\u0437\u044c\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (0). <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 1, \u0442\u043e \u0434\u0430\u043b\u0435\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044c\u044e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432, \u043f\u0435\u0440\u0432\u043e\u0435 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u2014 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0432\u0430\u0440\u044f, \u0430 \u0432\u0442\u043e\u0440\u043e\u0435 \u2014 \u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0438. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u0435 id (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 0 \u0438 4), \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0432 \u043a\u043b\u044e\u0447\u0430\u0445, \u0440\u0430\u0437\u043e\u0431\u044c\u0435\u043c \u0438\u0445 \u043e\u043f\u044f\u0442\u044c \u043d\u0430 25 \u0447\u0430\u0441\u0442\u0435\u0439 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043c \u0445\u0440\u0430\u043d\u0438\u043c\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435.<\/p>\n<p>  \u0422\u043e\u0433\u0434\u0430 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u043e\u0432\u0430\u0440\u0435 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f 2 \u043d\u043e\u0432\u044b\u0445 \u043a\u043b\u044e\u0447\u0430:<\/p>\n<pre><code class=\"python\">{1:(0, 2, 3, 4), 2: (0, 1, 3, 4), 3: (0, 1, 2), 0: (1, 2, 3), 4:(1, 2, \u2026.)} <\/code><\/pre>\n<p>  \u0421\u0430\u043c \u0436\u0435 \u043c\u0435\u0442\u043e\u0434 <b>deep_friends()<\/b> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"python\">def deep_friends(self, deep): \t\tresult = {}  \t\tdef fill_result(friends): \t\t\tfor i in VkFriends.parts(friends): \t\t\t\tr = requests.get(self.request_url('execute.deepFriends', 'targets=%s' % VkFriends.make_targets(i))).json()['response'] \t\t\t\tfor x, id in enumerate(i): \t\t\t\t\tresult[id] = tuple(r[x][&quot;items&quot;]) if r[x] else None  \t\tfor i in range(deep): \t\t\tif result: \t\t\t\t# \u0442\u0435 \u0430\u0439\u0434\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0432 \u043a\u043b\u044e\u0447\u0430\u0445 + \u043d\u0435 \u0431\u0435\u0440\u0435\u043c id:None \t\t\t\tfill_result(list(set([item for sublist in result.values() if sublist for item in sublist]) - set(result.keys()))) \t\t\telse: \t\t\t\tfill_result(requests.get(self.request_url('friends.get', 'user_id=%s' % self.my_id)).json()['response'][&quot;items&quot;])  \t\treturn result <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u044d\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u043a\u0438\u0434\u0430\u0442\u044c \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 id \u0432 <b>friends.get<\/b> \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0445\u0440\u0430\u043d\u0438\u043c\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b, \u043d\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e. <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0431\u044b <b>friends.get<\/b> \u0431\u044b\u043b \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 <b>users.get<\/b>, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u043e\u0433 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <b>user_ids<\/b>, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e id, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0443\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0443\u0437\u0435\u0439, \u0430 \u043d\u0435 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 id, \u0442\u043e \u043a\u043e\u0434 \u0431\u044b\u043b \u0431\u044b \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0449\u0435, \u0434\u0430 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0431\u044b\u043b\u043e \u0432 \u0440\u0430\u0437\u044b \u043c\u0435\u043d\u044c\u0448\u0435.<\/p>\n<h4>\u0421\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e<\/h4>\n<p>  \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a \u043d\u0430\u0447\u0430\u043b\u0443 \u0441\u0442\u0430\u0442\u044c\u0438, \u043c\u043e\u0433\u0443 \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u2014 \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e. \u0425\u0440\u0430\u043d\u0438\u043c\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043d\u0435 \u0441\u043f\u0430\u0441\u0430\u044e\u0442, \u0440\u0435\u0448\u0435\u043d\u0438\u0435 <a href=\"https:\/\/github.com\/alxpy\"> alxpy<\/a> \u0441 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e (\u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0435\u043c\u0443 \u0437\u0430 \u0432\u043a\u043b\u0430\u0434 \u0438 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 <s>\u0445\u043e\u0442\u044c \u043a\u043e\u043c\u0443-\u0442\u043e \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0440\u043e\u043c\u0435 \u043c\u0435\u043d\u044f<\/s>) \u0443\u0441\u043a\u043e\u0440\u044f\u043b\u043e \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434 \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043d\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e.<\/p>\n<p>  \u041c\u0443\u0434\u0440\u044b\u0439 \u0441\u043e\u0432\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043e\u0442 <a href=\"http:\/\/habrahabr.ru\/users\/igrishaev\/\" class=\"user_link\">igrishaev<\/a> \u2014 \u043d\u0443\u0436\u0435\u043d \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u0430\u043f-\u0440\u0435\u0434\u044c\u044e\u0441.<\/p>\n<p>  \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 25 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a API \u0447\u0435\u0440\u0435\u0437 <b>execute<\/b>, \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. 5 \u0442\u0430\u0447\u0435\u043a \u2014 \u044d\u0442\u043e \u0443\u0436\u0435 125 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u041d\u043e \u0438 \u044d\u0442\u043e \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0442\u0430\u043a. \u0417\u0430\u0431\u0435\u0433\u0430\u044f \u0432\u043f\u0435\u0440\u0435\u0434, \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438 \u0435\u0449\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c (\u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435):<\/p>\n<pre><code class=\"python\">while True: \tr = requests.get(request_url('execute.getMutual','source=%s&targets=%s' % (my_id, make_targets(lst)),access_token=True)).json() \tif 'response' in r: \t\tr = r[&quot;response&quot;] \t\tbreak \telse: \t\ttime.sleep(delay) <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435, \u0442\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u043d\u043e\u0432\u0430, \u0441\u043f\u0443\u0441\u0442\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0435\u043a\u0443\u043d\u0434. \u0422\u0430\u043a\u043e\u0439 \u043f\u0440\u0438\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u043d\u043e \u0437\u0430\u0442\u0435\u043c \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0442\u044c \u0432\u043e \u0432\u0441\u0435\u0445 \u043e\u0442\u0432\u0435\u0442\u0430\u0445 <b>None<\/b>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0447\u0435\u0441\u0442\u043d\u043e \u0431\u0443\u0434\u0435\u043c \u0436\u0434\u0430\u0442\u044c 1 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u041f\u043e\u043a\u0430 \u0447\u0442\u043e.<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438\u043b\u0438 \u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0438, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043d\u043e\u0435. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0443 \u043d\u0430\u0441 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0438\u0434\u0438\u0442\u0441\u044f \u043c\u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<ul>\n<li>\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0435\u0433\u043e id \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u0438 \u043a\u043e\u0434 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438: \u043b\u0438\u0431\u043e \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u0432\u0441\u0435\u0445 \u043e\u0431\u0449\u0438\u0445 \u0434\u0440\u0443\u0437\u0435\u0439, \u043b\u0438\u0431\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u0433\u0443\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u0434\u0440\u0443\u0437\u0435\u0439 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0433\u043b\u0443\u0431\u0438\u043d\u043e\u0439.<\/li>\n<li>\u0414\u0430\u043b\u0435\u0435 \u0432 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u0435\u043b\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a API \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u2014 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0434\u0440\u0443\u0437\u0435\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. <\/li>\n<li>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0441\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u043e-\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u2014 \u0437\u0434\u0435\u0441\u044c \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0443\u0437\u0435\u0439 \u043d\u0430 \u0447\u0430\u0441\u0442\u0438, \u043f\u043e 25 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u043e 75. \u041e\u0431 \u044d\u0442\u043e\u043c \u0447\u0443\u0442\u044c \u043d\u0438\u0436\u0435.<\/li>\n<li>\u0423 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u0447\u0430\u0441\u0442\u0435\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0435\u043c \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044e (producer-consumer).<\/li>\n<li>\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b, \u0441\u0440\u0430\u0437\u0443 \u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0443. \u0414\u0430, \u0432\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u0438 \u043f\u0440\u043e RPC. <\/li>\n<\/ul>\n<p>  \u0410 \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u0438\u0434\u0435\u043b\u0438 \u044d\u0442\u0443 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443, \u0442\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u044f \u043d\u0430\u043c\u0435\u043a\u0430\u044e.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/b2c\/b20\/261\/b2cb20261294456295d25ba7b2f4713c.png\"\/><\/div>\n<p>  \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0435 \u043e\u0442\u0432\u0435\u0442\u044b \u043f\u0440\u0438\u043d\u044f\u0442\u044b, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0438\u0445 \u0432 \u043e\u0434\u0438\u043d. \u0414\u0430\u043b\u0435\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0438\u043b\u0438 \u0432\u043e\u0432\u0441\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c, \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>  \u0422\u0443\u0442 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u0434 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f, \u0438 \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u0431\u044b\u043b\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0442\u043e \u043e\u043d\u0430 \u0442\u0430\u043a \u0438 \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0432 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435. \u0412\u0435\u0441\u044c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u0436\u0435, \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043d\u043e\u0432\u043e\u043c\u0443 \u0440\u0435\u043b\u0438\u0437\u0443.<\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <b>RabbitMQ<\/b>, \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u0439 \u2014 <b>Celery<\/b>.<\/p>\n<p>  \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u0441 \u043d\u0438\u043c\u0438 \u043d\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f, \u0432\u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0432\u0435\u0442\u0443\u044e \u0432\u0430\u043c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">RabbitMQ<\/b><\/p>\n<div class=\"spoiler_text\"><a href=\"http:\/\/habrahabr.ru\/post\/149694\/\">\u0427\u0430\u0441\u0442\u044c 1<\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/post\/150134\/\">\u0427\u0430\u0441\u0442\u044c 2<\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/post\/200870\/\">\u0427\u0430\u0441\u0442\u044c 3<\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/post\/201096\/\">\u0427\u0430\u0441\u0442\u044c 4<\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/post\/201178\/\">\u0427\u0430\u0441\u0442\u044c 5<\/a><br \/>  <a href=\"http:\/\/habrahabr.ru\/post\/236221\/\">\u0427\u0430\u0441\u0442\u044c 6<\/a>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Celery<\/b><\/p>\n<div class=\"spoiler_text\"><a href=\"http:\/\/docs.celeryproject.org\/en\/latest\/getting-started\/first-steps-with-celery.html\">First steps with Celery<\/a>  <\/div>\n<\/div>\n<p>  \u041d\u0435 \u043d\u0430\u0434\u043e \u0431\u043e\u044f\u0442\u044c\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u044c, \u0445\u043e\u0442\u044c \u0438 \u0433\u043e\u0432\u043e\u0440\u044f\u0442, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u0432\u043e\u044e \u0433\u043e\u043b\u043e\u0432\u0443, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0448\u044c \u00ab\u0434\u0443\u043c\u0430\u0442\u044c \u043d\u0435 \u043e\u0434\u043d\u0438\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u043c, \u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438\u00bb, \u043d\u043e \u044d\u0442\u043e \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u0442\u0430\u043a. <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 Mac, \u043a\u0430\u043a \u0438 \u0443 \u0430\u0432\u0442\u043e\u0440\u0430, \u0442\u043e <b>RabbitMQ<\/b> \u0448\u0438\u043a\u0430\u0440\u043d\u043e \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <b>Homebrew<\/b>:<\/p>\n<pre><code class=\"bash\">brew update brew install rabbitmq <\/code><\/pre>\n<p>  <b>Celery<\/b> \u0436\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0435\u0449\u0435 \u043b\u0435\u0433\u0447\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0440\u0435\u0442\u044c\u044e \u0432\u0435\u0442\u043a\u0443 <b>Python<\/b>:<\/p>\n<pre><code class=\"bash\">pip3 install Celery <\/code><\/pre>\n<p>  \u0423 \u043c\u0435\u043d\u044f <b>Celery<\/b> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043d\u0430 Linux Mint, \u0430 <b>RabbitMQ<\/b> \u2014 \u043d\u0430 Mac. \u0421 \u0432\u0438\u043d\u0434\u043e\u0439, \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u2014 <s>\u0442\u044f\u0436\u0435\u043b\u043e \u043d\u0430\u0439\u0442\u0438, \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c<\/s> \u043e\u043d\u0430 \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0432\u0441\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c response \u043c\u043e\u0435\u043c\u0443 Mac.<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c <b>virtual host<\/b>, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0434\u0430\u0434\u0438\u043c \u0435\u043c\u0443 \u043f\u0440\u0430\u0432\u0430:<\/p>\n<pre><code class=\"bash\">rabbitmqctl add_vhost vk_friends rabbitmqctl add_user user password rabbitmqctl set_permissions -p vk_friends user &quot;.*&quot; &quot;.*&quot; &quot;.*&quot; <\/code><\/pre>\n<p>  \u0412 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <b>RabbitMQ<\/b> \u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c ip \u0445\u043e\u0441\u0442\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d:<\/p>\n<pre><code class=\"bash\">vim \/usr\/local\/etc\/rabbitmq\/rabbitmq-env.conf NODE_IP_ADDRESS=192.168.1.14 \/\/ \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043c\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439, \u043a\u0430\u043a\u0443\u044e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u2014 \u0440\u0435\u0448\u0430\u0442\u044c \u0432\u0430\u043c. <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/19d\/7aa\/ddd\/19d7aaddddcc4c78b67345a49df262d4.png\"\/><\/div>\n<p>  \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0440\u043e\u0443\u0442\u0435\u0440 \u0438\u043b\u0438 \u0435\u0449\u0435 \u0447\u0442\u043e-\u0442\u043e, \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e <b>RabbitMQ<\/b> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 5672 \u043f\u043e\u0440\u0442, \u043d\u0443 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044e \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0432\u0430\u0448\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0442\u043e \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432 \u0440\u0430\u0441\u043a\u0438\u0434\u0430\u0435\u0442\u0435 \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u043c\u0430\u0448\u0438\u043d\u0430\u043c, \u0430 \u0438\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0440\u043e\u043a\u0435\u0440, \u0438, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0441\u0435\u0442\u044c, <b>Celery<\/b> \u0434\u043e <b>RabbitMQ<\/b> \u0442\u0430\u043a \u0438 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u0447\u0438\u0442\u0441\u044f.<\/p>\n<p>  \u041e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043d\u043e\u0432\u043e\u0441\u0442\u044c\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e 3 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0441 \u043e\u0434\u043d\u043e\u0433\u043e id. \u0423\u043c\u043d\u043e\u0436\u0438\u043c \u044d\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043a API \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 (25), \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 (75).<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/dab\/ce0\/6de\/dabce06dec4f4406aa43796ba021043b.png\"\/><\/div>\n<p>  \u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432, \u0442\u043e \u043d\u0430\u0441\u0442\u0430\u043d\u0435\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u043d\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u0437\u0430 \u0434\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u043d\u044b\u0439 \u043b\u0438\u043c\u0438\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f<b> token<\/b> (\u0432 <b>settings.py<\/b>) \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u043c, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u043c \u0432 \u0441\u0435\u0431\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0441 \u0440\u0430\u0437\u043d\u044b\u0445 id. \u0421\u043a\u0440\u0438\u043f\u0442 \u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043a \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 API \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445 \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"python\">def request_url(method_name, parameters, access_token=False): \t&quot;&quot;&quot;read https:\/\/vk.com\/dev\/api_requests&quot;&quot;&quot;  \treq_url = 'https:\/\/api.vk.com\/method\/{method_name}?{parameters}&v={api_v}'.format( \t\tmethod_name=method_name, api_v=api_v, parameters=parameters)  \tif access_token: \t\treq_url = '{}&access_token={token}'.format(req_url, token=random.choice(token))  \treturn req_url  <\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043f\u043b\u0430\u043d\u0435 \u0443 \u0432\u0430\u0441 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u0432 \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 (\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0440\u044f\u0447\u044c \u0434\u0440\u0443\u0437\u0435\u0439, \u0440\u043e\u0434\u043d\u044b\u0445), \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 4 \u0442\u043e\u043a\u0435\u043d\u0430\u043c\u0438 \u0438 3 \u0432\u043e\u0440\u043a\u0435\u0440\u0430\u043c\u0438.<\/p>\n<p>  \u041d\u0435\u0442, \u0432\u0430\u043c \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <b>time.sleep()<\/b>, \u0438\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0448\u0435 \u0441 while, \u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u0433\u043e\u0442\u043e\u0432\u044c\u0442\u0435\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0443\u0441\u0442\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b \u2014 id:None), \u0438\u043b\u0438 \u043f\u043e\u0434\u043e\u043b\u044c\u0448\u0435 \u0436\u0434\u0430\u0442\u044c. <\/p>\n<p>  \u0421\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 <b>call.py<\/b>:<\/p>\n<pre><code class=\"python\">def getMutual(): \tall_friends = friends(my_id) \tc_friends = group(mutual_friends.s(i) for i in parts(list(all_friends[0].keys()), 75))().get() \tresult = {k: v for d in c_friends for k, v in d.items()} \treturn cleaner(result)  def getDeep(): \tresult = {} \tfor i in range(deep): \t\tif result: \t\t\t# \u0442\u0435 \u0430\u0439\u0434\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0432 \u043a\u043b\u044e\u0447\u0430\u0445 + \u043d\u0435 \u0431\u0435\u0440\u0435\u043c id:None \t\t\tlst = list(set([item for sublist in result.values() if sublist for item in sublist]) - set(result.keys())) \t\t\td_friends = group(deep_friends.s(i) for i in parts(list(lst), 75))().get() \t\t\tresult = {k: v for d in d_friends for k, v in d.items()} \t\t\tresult.update(result) \t\telse: \t\t\tall_friends = friends(my_id) \t\t\td_friends = group(deep_friends.s(i) for i in parts(list(all_friends[0].keys()), 75) )().get() \t\t\tresult = {k: v for d in d_friends for k, v in d.items()} \t\t\tresult.update(result)  \treturn cleaner(result) <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0432 2 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <a href=\"http:\/\/celery.readthedocs.org\/en\/latest\/userguide\/canvas.html#groups\">groups()<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u0439, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043c\u044b \u00ab\u0441\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u043c\u00bb \u043e\u0442\u0432\u0435\u0442. \u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u043a\u0430\u043a <b>deep_friends()<\/b> \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u0432\u043d\u0430\u0447\u0430\u043b\u0435 (\u0442\u0430\u043c \u0443\u0436 \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0430\u0440\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0434\u0430\u0436\u0435 \u0431\u0435\u0437 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438)? \u0421\u043c\u044b\u0441\u043b \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0442\u0435\u043c \u0436\u0435 \u2014 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432.<\/p>\n<p>  \u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, <b>tasks.py<\/b>. \u041a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u044d\u0442\u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u0443:<\/p>\n<pre><code class=\"python\">@app.task def mutual_friends(lst): \t&quot;&quot;&quot; \tread https:\/\/vk.com\/dev\/friends.getMutual and read https:\/\/vk.com\/dev\/execute \t&quot;&quot;&quot; \tresult = {} \tfor i in list(parts(lst, 25)): \t\tr = requests.get(request_url('execute.getMutual', 'source=%s&targets=%s' % (my_id, make_targets(i)), access_token=True)).json()['response']\t \t\tfor x, vk_id in enumerate(i): \t\t\tresult[vk_id] = tuple(i for i in r[x]) if r[x] else None \treturn result  @app.task def deep_friends(friends): \tresult = {} \tfor i in list(parts(friends, 25)): \t\tr = requests.get(request_url('execute.deepFriends', 'targets=%s' % make_targets(i), access_token=True)).json()[&quot;response&quot;] \t \t\tfor x, vk_id in enumerate(i): \t\t\tresult[vk_id] = tuple(r[x][&quot;items&quot;]) if r[x] else None  \treturn result <\/code><\/pre>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043e, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c <b>RabbitMQ<\/b> \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre><code class=\"bash\">rabbitmq-server <\/code><\/pre>\n<p>  \u0417\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043f\u0430\u043f\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u043c \u0432\u043e\u0440\u043a\u0435\u0440\u0430:<\/p>\n<pre><code class=\"bash\">celery -A tasks worker --loglevel=info <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u0449\u0438\u0445 \u0438\u043b\u0438 \u00ab\u0433\u043b\u0443\u0431\u0438\u043d\u043d\u044b\u0445\u00bb \u0434\u0440\u0443\u0437\u0435\u0439, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438:<\/p>\n<pre><code class=\"bash\">python3 call.py <\/code><\/pre>\n<p>  <\/p>\n<h4>\u041e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u0445 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439<\/h4>\n<p>  \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0443 \u0430\u0432\u0442\u043e\u0440\u0430 <a href=\"http:\/\/habrahabr.ru\/post\/216831\/\">\u0441\u0442\u0430\u0442\u044c\u0438<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0438\u043b\u0430 \u043c\u0435\u043d\u044f \u043d\u0430 <a href=\"http:\/\/habrahabr.ru\/post\/221251\/\">\u043f\u0435\u0440\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c<\/a>, <b>343 \u0434\u0440\u0443\u0433\u0430<\/b> (\u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043e\u0431\u0449\u0438\u0445 \u0434\u0440\u0443\u0437\u0435\u0439) \u00ab\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0438\u0441\u044c\u00bb \u0437\u0430 <b>119 \u0441\u0435\u043a\u0443\u043d\u0434<\/b>. <\/p>\n<p>  \u041c\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0437 <a href=\"http:\/\/habrahabr.ru\/post\/221251\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u0434\u0435\u043b\u0430\u043b \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0437\u0430 <b>9 \u0441\u0435\u043a\u0443\u043d\u0434<\/b>.<\/p>\n<p>  \u0421\u0435\u0439\u0447\u0430\u0441 \u0443 \u0442\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u0440\u0430 \u0434\u0440\u0443\u0433\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0434\u0440\u0443\u0437\u0435\u0439 \u2014 308. \u0427\u0442\u043e \u0436\u0435, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u043b\u0438\u0448\u043d\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0432\u043e\u0441\u044c\u043c\u0438 id, \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0433\u043e \u0434\u0440\u0430\u0433\u043e\u0446\u0435\u043d\u043d\u0443\u044e \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0445\u043e\u0442\u044f \u0437\u0430 \u0442\u0443 \u0436\u0435 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c 75 id.<\/p>\n<p>  \u0421 \u043e\u0434\u043d\u0438\u043c \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0437\u0430\u043d\u044f\u043b\u0430 <b>4.2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b<\/b>, \u0441 \u0434\u0432\u0443\u043c\u044f \u0432\u043e\u0440\u043a\u0435\u0440\u0430\u043c\u0438 \u2014 <b>2.2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b<\/b>. <\/p>\n<p>  \u0415\u0441\u043b\u0438 119 \u043e\u043a\u0440\u0443\u0433\u043b\u0438\u043c \u0434\u043e 120, \u0430 2.2 \u0434\u043e 2, \u0442\u043e \u043c\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 <b>\u0432 60 \u0440\u0430\u0437 \u0431\u044b\u0441\u0442\u0440\u0435\u0435<\/b>.<\/p>\n<p>  \u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u00ab\u0433\u043b\u0443\u0431\u0438\u043d\u043d\u044b\u0445 \u0434\u0440\u0443\u0437\u0435\u0439\u00bb (\u0434\u0440\u0443\u0437\u044c\u044f \u043c\u043e\u0438\u0445 \u0434\u0440\u0443\u0437\u0435\u0439 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 + \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c id, \u0447\u0442\u043e\u0431\u044b \u0436\u0434\u0430\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435) \u2014 \u043f\u0440\u0438 \u0433\u043b\u0443\u0431\u0438\u043d\u0435, \u0440\u0430\u0432\u043d\u043e\u0439 2, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043b\u044e\u0447\u0435\u0439 \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u043e 1 251. <\/p>\n<p>  \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u2014 <b>17.9 \u0441\u0435\u043a\u0443\u043d\u0434\u044b<\/b>.<\/p>\n<p>  \u041e\u0434\u043d\u0438\u043c \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u043c \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u2014 <b>15.1 \u0441\u0435\u043a\u0443\u043d\u0434\u044b<\/b>, \u0441 \u0434\u0432\u0443\u043c\u044f \u0432\u043e\u0440\u043a\u0435\u0440\u0430\u043c\u0438 \u2014 <b> 8.2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b<\/b>. <\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, <b>deep_friends()<\/b> \u0441\u0442\u0430\u043b \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e <b>\u0432 2.18 \u0440\u0430\u0437\u0430<\/b>. <\/p>\n<p>  \u0414\u0430, \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0430\u043a\u043e\u0439 \u0440\u0430\u0434\u0443\u0436\u043d\u044b\u0439, \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0436\u0434\u0430\u0442\u044c \u0438 \u043f\u043e 10, \u0438 \u043f\u043e 20 \u0441\u0435\u043a\u0443\u043d\u0434 (\u0445\u043e\u0442\u044f \u0447\u0430\u0441\u0442\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044f <b>1.2 \u2014 1.6 \u0441\u0435\u043a\u0443\u043d\u0434<\/b>), \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u044d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043d\u0430 \u0441\u0435\u0440\u0432\u0438\u0441, \u0432\u0435\u0434\u044c \u043c\u044b \u043d\u0435 \u043e\u0434\u043d\u0438 \u0432\u043e \u0432\u0441\u0435\u043b\u0435\u043d\u043d\u043e\u0439.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"\/\/habrastorage.org\/files\/74b\/3d9\/722\/74b3d9722972459e9a85bfb97508c9dc.png\"\/><\/div>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u043f\u0440\u043e \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u0441\u0432\u043e\u0435\u0433\u043e \u0436\u0435\u043b\u0435\u0437\u0430, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u043e\u043a\u0435\u043d\u044b, \u0441\u0435\u0442\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 \u0430\u0432\u0442\u043e\u0440\u0430 \u0440\u0435\u0437\u043a\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u044e\u0437\u0430\u043b \u0441\u0432\u043e\u0439 \u0430\u0439\u0444\u043e\u043d \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u043e\u0447\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430) \u0438 \u0438\u043d\u044b\u0435 \u0444\u0430\u043a\u0442\u043e\u0440\u044b.<\/p>\n<h4>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430<\/h4>\n<p>  \u0414\u0430, \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0411\u0414. \u0415\u0441\u043b\u0438 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c (\u0430 \u043e\u043d\u043e \u0442\u0430\u043a \u0438 \u0431\u0443\u0434\u0435\u0442), \u043c\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u0442\u043e \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0438\u0445 \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u0433\u0434\u0435-\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430, \u043f\u043e\u0442\u043e\u043c \u044d\u0442\u0438 \u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0441 \u043d\u0438\u043c\u0438 \u043a\u0430\u043a\u0438\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u041d\u0435 \u0432\u0438\u0436\u0443 \u0441\u043c\u044b\u0441\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0443\u0431\u0434, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u044b\u043b \u0431\u044b \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u043c \u0438 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u0433\u0440\u0430\u0444\u043e\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u2014 \u0442\u043e \u0434\u0430, \u0442\u0443\u0442 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430 \u0433\u0440\u0430\u0444\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0431\u0434, \u043d\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u043e\u043c \u0431\u0443\u0434\u0435\u043c \u0432 \u00ab\u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445\u00bb, <a href=\"https:\/\/docs.python.org\/3.4\/library\/pickle.html\">pickle<\/a> \u043d\u0430\u043c \u0445\u0432\u0430\u0442\u0438\u0442 \u0432\u043f\u043e\u043b\u043d\u0435.<\/p>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u0439 \u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u043a\u043b\u044e\u0447\u0438, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 <b>None<\/b>. \u042d\u0442\u043e \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0435 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u044b. \u041f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u044d\u0442\u0438 id \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u0433\u0440\u0430\u0444\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u0435\u0441\u0442\u044c \u0443 \u043a\u043e\u0433\u043e-\u0442\u043e \u0432 \u0434\u0440\u0443\u0437\u044c\u044f\u0445, \u043d\u0443 \u0430 \u043c\u044b \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043c \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u044e\u0447\u0435\u0439 \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435:<\/p>\n<pre><code class=\"python\">def cleaner(dct): \treturn {k:v for k, v in dct.items() if v != None}  def save_or_load(myfile, sv, smth=None): \tif sv and smth: \t\tpickle.dump(smth, open(myfile, &quot;wb&quot;)) \telse: \t\treturn pickle.load(open(myfile, &quot;rb&quot;)) <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u0433\u0434\u0435-\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0442\u043e \u0433\u0434\u0435-\u0442\u043e \u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0435\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c, \u0434\u0430\u0431\u044b \u0437\u0430\u043d\u043e\u0432\u043e \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c id.<\/p>\n<h4>\u0410\u043d\u0430\u043b\u0438\u0437 \u0433\u0440\u0430\u0444\u0430<\/h4>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c <b>networkx<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0437\u0430 \u043d\u0430\u0441 \u0432\u0441\u044e <s>\u0433\u0440\u044f\u0437\u043d\u0443\u044e<\/s> \u0440\u0430\u0431\u043e\u0442\u0443. \u0411\u043e\u043b\u044c\u0448\u0435 \u0443\u0437\u043d\u0430\u0442\u044c \u043f\u0440\u043e <b>networkx<\/b> \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437 \u044d\u0442\u043e\u0439 <a href=\"http:\/\/habrahabr.ru\/post\/125898\/\">\u0441\u0442\u0430\u0442\u044c\u0438<\/a>.<\/p>\n<pre><code class=\"bash\">pip3 install networkx <\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u043d\u0435\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u0444, \u043d\u0430\u0440\u0438\u0441\u0443\u0435\u043c \u0435\u0433\u043e. <b>networkx<\/b> \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f <b>matplotlib<\/b>: <\/p>\n<pre><code class=\"bash\">pip3 install matplotlib <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0430\u043c \u0433\u0440\u0430\u0444. \u0412\u043e\u043e\u0431\u0449\u0435, \u0435\u0441\u0442\u044c 2 \u043f\u0443\u0442\u0438. <\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u043e\u0436\u0440\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438:<\/p>\n<pre><code class=\"python\">def adder(self, node): \tif node not in self.graph.nodes(): \t\tself.graph.add_node(node)  self.graph = nx.Graph() \tfor k, v in self.dct.items(): \t\tself.adder(k) \t\tfor i in v: \t\t\tself.adder(i) \t\t\tself.graph.add_edge(k, i) <\/code><\/pre>\n<p>  \u0418 \u044d\u0442\u043e \u043d\u0435 \u0430\u0432\u0442\u043e\u0440 \u0432\u044b\u0436\u0438\u043b \u0438\u0437 \u0443\u043c\u0430, \u043d\u0435\u0442. \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 <a href=\"https:\/\/www.clear.rice.edu\/comp200\/resources\/howto\/networkx.shtml\">\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435<\/a> \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \u0420\u0430\u0439\u0441\u0430 (<b>Rice University<\/b>), \u043f\u043e\u0434 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c <i>Convert Dictionary Graph Representation into networkx Graph Representation<\/i>: <\/p>\n<pre><code class=\"python\">def dict2nx(aDictGraph):     &quot;&quot;&quot; Converts the given dictionary representation of a graph,      aDictGraph, into a networkx DiGraph (directed graph) representation.        aDictGraph is a dictionary that maps nodes to its      neighbors (successors):  {node:[nodes]}     A DiGraph object is returned.     &quot;&quot;&quot;     g = nx.DiGraph()     for node, neighbors in aDictGraph.items():         g.add_node(node)  # in case there are nodes with no edges         for neighbor in neighbors:             g.add_edge(node, neighbor)     return g  <\/code><\/pre>\n<p>  \u041c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043c\u043d\u0435 \u043d\u0430 \u0441\u043b\u043e\u0432\u043e, \u0433\u0440\u0430\u0444 \u0441\u0442\u0440\u043e\u0438\u043b\u0441\u044f \u0446\u0435\u043b\u044b\u0439 \u0432\u0435\u0447\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u0432 \u043d\u0435\u043c \u0431\u044b\u043b\u043e \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 300 000 \u0432\u0435\u0440\u0448\u0438\u043d, \u043c\u043e\u0435 \u0442\u0435\u0440\u043f\u0435\u043d\u0438\u0435 \u043b\u043e\u043f\u043d\u0443\u043b\u043e. <s>\u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u043e\u0448\u043b\u0438 <a href=\"https:\/\/www.coursera.org\/course\/interactivepython\">\u043a\u0443\u0440\u0441<\/a> \u043d\u0430 \u0421oursera \u043f\u043e Python \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430, \u0442\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435, \u043e \u0447\u0435\u043c \u044f. \u0410 \u044f \u0432\u0441\u0435\u043c \u043d\u0430 \u043a\u0443\u0440\u0441\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u0447\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u043b\u044e\u0434\u0435\u0439 \u0443\u0447\u0430\u0442, \u043d\u0443 \u0434\u0430 \u043b\u0430\u0434\u043d\u043e.<\/s><\/p>\n<p>  \u0414\u0430, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0430, \u043d\u043e \u0441\u0443\u0442\u044c \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u0439 \u0436\u0435 \u2014 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043b\u044e\u0447\u0438, \u0434\u0435\u043b\u0430\u044f \u0438\u0445 \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c\u0438, \u043f\u043e\u0442\u043e\u043c \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0438 \u0442\u043e \u0435\u0441\u043b\u0438 \u0438\u0445 \u0435\u0449\u0435 \u043d\u0435\u0442 \u0432 \u0433\u0440\u0430\u0444\u0435, \u0430 \u043f\u043e\u0442\u043e\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0438\u0445 \u0440\u0435\u0431\u0440\u0430\u043c\u0438 (\u0432 \u043c\u043e\u0435\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435). <\/p>\n<p>  \u0410 \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0441\u0435 \u0437\u0430 \u0441\u0435\u043a\u0443\u043d\u0434\u044b:<\/p>\n<pre><code class=\"python\">self.graph = nx.from_dict_of_lists(self.dct) <\/code><\/pre>\n<p>  \u041a\u043e\u0434 \u043b\u0435\u0436\u0438\u0442 \u0432 \u0444\u0430\u0439\u043b\u0435 <b>graph.py<\/b>, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u0444 \u043e\u0431\u0449\u0438\u0445 \u0434\u0440\u0443\u0437\u0435\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0438\u043b\u0438 \u0436\u0435 \u0433\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 <b>VkGraph()<\/b>, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434 <b>draw_graph()<\/b>.<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/d3a\/f5b\/c31\/d3af5bc314db469da4010b85fefff3af.png\"\/><br \/>  \u042d\u0442\u043e \u0433\u0440\u0430\u0444 \u043e\u0431\u0449\u0438\u0445 \u0434\u0440\u0443\u0437\u0435\u0439, \u0432\u0441\u0435\u0433\u043e 306 \u0432\u0435\u0440\u0448\u0438\u043d \u0438 2096 \u0440\u0435\u0431\u0435\u0440. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044f \u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0435 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440 (\u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435), \u043d\u043e \u0432\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0442\u0438\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u0444 \u00ab\u043f\u043e\u0434 \u0441\u0435\u0431\u044f\u00bb. \u0412\u043e\u0442 \u043f\u0430\u0440\u0430 \u0441\u0441\u044b\u043b\u043e\u043a:<\/p>\n<ul>\n<li><a href=\"http:\/\/matplotlib.org\/api\/figure_api.html\">Figure API<\/a><\/li>\n<li><a href=\"http:\/\/networkx.github.io\/documentation\/latest\/reference\/generated\/networkx.drawing.nx_pylab.draw_networkx.html#networkx.drawing.nx_pylab.draw_networkx\">Draw Networkx<\/a><\/li>\n<\/ul>\n<p>  \u0410 \u0441\u0430\u043c \u043c\u0435\u0442\u043e\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"python\">def draw_graph(self): \tplt.figure(figsize=(19,19), dpi=450,) \tnx.draw(self.graph, node_size=100, cmap=True) \tplt.savefig(&quot;%s graph.png&quot; % datetime.now().strftime('%H:%M:%S %d-%m-%Y')) <\/code><\/pre>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 <b>date graph.png<\/b> \u0432 \u043f\u0430\u043f\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041d\u0435 \u0441\u043e\u0432\u0435\u0442\u0443\u044e \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u0444 \u0434\u043b\u044f \u0433\u043b\u0443\u0431\u0438\u043d\u043d\u044b\u0445 \u0434\u0440\u0443\u0437\u0435\u0439. \u041f\u0440\u0438 <b>308<\/b> \u0434\u0440\u0443\u0437\u044c\u044f\u0445 \u0438 \u0433\u043b\u0443\u0431\u0438\u043d\u043e\u0439 \u0440\u0430\u0432\u043d\u043e\u0439 2, \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u043e\u043b\u0435\u0435 <b>145 000<\/b> \u043a\u043b\u044e\u0447\u0435\u0439. \u0410 \u0435\u0441\u0442\u044c \u0432\u0435\u0434\u044c \u0435\u0449\u0435 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u2014 \u043a\u043e\u0440\u0442\u0435\u0436\u0438 \u0441 id, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0440\u044f\u0434 \u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u043c\u0430\u043b\u043e.<\/p>\n<p>  \u0414\u043e\u043b\u0433\u043e \u0438\u0441\u043a\u0430\u043b \u0441\u0430\u043c\u044b\u0439 \u043c\u0430\u043b\u043e\u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0434\u0440\u0443\u0437\u0435\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0432 \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435, \u0445\u043e\u0442\u044f \u0442\u0443\u0442 \u0432\u0430\u0436\u043d\u0435\u0435 \u2014 \u0434\u0440\u0443\u0437\u044c\u044f-\u0434\u0440\u0443\u0437\u0435\u0439. 10 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0440\u0443\u0437\u0435\u0439 (1 \u0438\u0437 \u043d\u0438\u0445 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u0441\u044f), \u043f\u0440\u0438 \u043d\u0430\u0448\u0435\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0433\u043b\u0443\u0431\u0438\u043d\u0435 (2), \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435 \u043d\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u043e\u0441\u044c <b>1234<\/b> \u043a\u043b\u044e\u0447\u0430 \u0438 <b>517 174<\/b> id (\u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439). \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e <b>419<\/b> \u0434\u0440\u0443\u0437\u0435\u0439 \u0443 \u043e\u0434\u043d\u043e\u0433\u043e id. \u0414\u0430, \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0438 \u043e\u0431\u0449\u0438\u0435 \u0434\u0440\u0443\u0437\u044c\u044f, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043c \u0433\u0440\u0430\u0444, \u043c\u044b \u044d\u0442\u043e \u043f\u043e\u0439\u043c\u0435\u043c:<\/p>\n<pre><code class=\"python\">deep_friends = VkGraph(d_friends_dct) print('\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0435\u0440\u0448\u0438\u043d:', deep_friends.graph.number_of_nodes()) print('\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u0431\u0435\u0440:', deep_friends.graph.number_of_edges()) <\/code><\/pre>\n<p>  \u0412\u0435\u0440\u043d\u0435\u0442:<\/p>\n<pre><code class=\"bash\">\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0435\u0440\u0448\u0438\u043d: 370341 \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u0431\u0435\u0440: 512949 <\/code><\/pre>\n<p>  \u0421 \u0442\u0430\u043a\u0438\u043c\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f. \u0423 <b>networkx<\/b> \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 <a href=\"https:\/\/networkx.github.io\/documentation\/networkx-1.9\/reference\/algorithms.html\">\u0441\u043f\u0438\u0441\u043e\u043a \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043a \u0433\u0440\u0430\u0444\u0430\u043c. \u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c <b>\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435<\/b> \u0438\u0437 \u043d\u0438\u0445.<\/p>\n<h5>\u0421\u0432\u044f\u0437\u043d\u044b\u0439 \u0433\u0440\u0430\u0444<\/h5>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c, \u0441\u0432\u044f\u0437\u043d\u044b\u0439 \u043b\u0438 \u0443 \u043d\u0430\u0441 \u0433\u0440\u0430\u0444:<\/p>\n<pre><code class=\"python\">print('\u0421\u0432\u044f\u0437\u043d\u044b\u0439 \u0433\u0440\u0430\u0444?', nx.is_connected(deep_friends.graph)) <\/code><\/pre>\n<p>  \u0421\u0432\u044f\u0437\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 \u2014 \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u0433\u0440\u0430\u0444, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043b\u044e\u0431\u0430\u044f \u043f\u0430\u0440\u0430 \u0432\u0435\u0440\u0448\u0438\u043d \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u043c. <\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0443 \u0442\u043e\u0433\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0433\u043e id \u043f\u0440\u0438 \u0433\u043b\u0443\u0431\u0438\u043d\u0435, \u0440\u0430\u0432\u043d\u043e\u0439 1, \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0439 \u0433\u0440\u0430\u0444, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 1268 \u0432\u0435\u0440\u0448\u0438\u043d \u0438 1329 \u0440\u0435\u0431\u0435\u0440:<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/883\/49f\/429\/88349f42920f4f378d79b895bfe4c767.png\"\/><br \/>  \u0412\u043e\u043f\u0440\u043e\u0441 \u0437\u043d\u0430\u0442\u043e\u043a\u0430\u043c. \u0420\u0430\u0437 \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0433\u0440\u0430\u0444 \u0434\u0440\u0443\u0437\u044c\u044f-\u0434\u0440\u0443\u0437\u0435\u0439, \u043e\u043d \u043f\u043e-\u043b\u044e\u0431\u043e\u043c\u0443 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0432\u044f\u0437\u043d\u044b\u043c. \u041d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u0430\u043a\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0437 \u043d\u0438\u043e\u0442\u043a\u0443\u0434\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u043b\u0430\u0441\u044c \u0432\u0435\u0440\u0448\u0438\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u043d\u0438 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445. \u041e\u0434\u043d\u0430\u043a\u043e \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0441\u043f\u0440\u0430\u0432\u0430 \u043e\u0434\u043d\u0443 \u0432\u0435\u0440\u0448\u0438\u043d\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0430 \u043d\u0438 \u0441 \u043e\u0434\u043d\u043e\u0439. \u041f\u043e\u0447\u0435\u043c\u0443? \u041f\u0440\u0438\u0437\u044b\u0432\u0430\u044e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u0441\u0442\u0438\u043d\u0443. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0443\u0437\u0435\u0439, \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 id X. \u0418\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0433\u0440\u0430\u0444 \u043d\u0435\u0441\u0432\u044f\u0437\u043d\u044b\u0439. \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0434\u0440\u0443\u0437\u0435\u0439 \u044d\u0442\u043e\u0433\u043e X (\u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0432\u0435\u0434\u044c). \u0422\u0430\u043a \u0432\u043e\u0442 \u0435\u0441\u043b\u0438 \u0443 X \u0432\u0441\u0435 \u0434\u0440\u0443\u0437\u044c\u044f \u0441\u043a\u0440\u044b\u0442\u044b\u0435, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435:<\/p>\n<pre><code class=\"python\">{X:(), ...} <\/code><\/pre>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0433\u0440\u0430\u0444, \u043c\u044b \u0447\u0435\u0441\u0442\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u0435\u0440\u0448\u0438\u043d\u0443 X, \u043d\u043e \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0440\u0435\u0431\u0435\u0440 \u0443 \u043d\u0435\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0414\u0430, \u0447\u0438\u0441\u0442\u043e \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443 \u0432\u0435\u0440\u0448\u0438\u043d\u044b X \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0440\u0435\u0431\u0440\u043e \u0441 \u0432\u0435\u0440\u0448\u0438\u043d\u043e\u0439, id \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u043d \u0432 <b>settings.py<\/b>, \u043d\u043e \u0432\u044b \u0436\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0438\u0442\u0430\u043b\u0438 \u2014 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u0440\u0438 \u0433\u043b\u0443\u0431\u0438\u043d\u0435, \u0440\u0430\u0432\u043d\u043e\u0439 2, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435 id, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445. \u0418 \u0442\u043e\u0433\u0434\u0430 \u0443 \u0432\u0435\u0440\u0448\u0438\u043d\u044b X \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u0440\u0435\u0431\u0440\u0430.  <\/div>\n<\/div>\n<p>  \u0411\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 <b>True<\/b>.<\/p>\n<h5>\u0414\u0438\u0430\u043c\u0435\u0442\u0440, \u0446\u0435\u043d\u0442\u0440 \u0438 \u0440\u0430\u0434\u0438\u0443\u0441<\/h5>\n<p>  \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e <b>\u0434\u0438\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0433\u0440\u0430\u0444\u0430<\/b> \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0435\u0433\u043e \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c\u0438. <\/p>\n<pre><code class=\"python\">print('\u0414\u0438\u0430\u043c\u0435\u0440\u0442 \u0433\u0440\u0430\u0444\u0430:', nx.diameter(deep_friends.graph)) <\/code><\/pre>\n<p>  <b>\u0426\u0435\u043d\u0442\u0440 \u0433\u0440\u0430\u0444\u0430<\/b> \u2014 \u044d\u0442\u043e \u043b\u044e\u0431\u0430\u044f \u0432\u0435\u0440\u0448\u0438\u043d\u0430, \u0442\u0430\u043a\u0430\u044f, \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442 \u043d\u0435\u0435 \u0434\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043e\u0442\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e. \u0426\u0435\u043d\u0442\u0440\u043e\u043c \u0433\u0440\u0430\u0444\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0434\u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0430 \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0448\u0438\u043d. \u0418\u043b\u0438 \u043f\u0440\u043e\u0449\u0435. \u0426\u0435\u043d\u0442\u0440 \u0433\u0440\u0430\u0444\u0430 \u2014 \u0432\u0435\u0440\u0448\u0438\u043d\u0430, \u044d\u043a\u0441\u0446\u0435\u043d\u0442\u0440\u0438\u0441\u0438\u0442\u0435\u0442 (\u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442 \u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0434\u043e \u0441\u0430\u043c\u043e\u0439 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0439 \u043e\u0442 \u043d\u0435\u0435) \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0432\u0435\u043d \u0440\u0430\u0434\u0438\u0443\u0441\u0443. <\/p>\n<pre><code class=\"python\">print('\u0426\u0435\u043d\u0442\u0440 \u0433\u0440\u0430\u0444\u0430:', nx.center(deep_friends.graph)) <\/code><\/pre>\n<p>  \u0412\u0435\u0440\u043d\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0435\u0440\u0448\u0438\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0433\u0440\u0430\u0444\u0430. \u041d\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u0439\u0442\u0435\u0441\u044c, \u0435\u0441\u043b\u0438 \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f id, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0432 <b>settings.py<\/b>.<\/p>\n<p>  <b>\u0420\u0430\u0434\u0438\u0443\u0441 \u0433\u0440\u0430\u0444\u0430<\/b> \u2014 \u044d\u0442\u043e \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u0439 \u0438\u0437 \u044d\u043a\u0441\u0446\u0435\u043d\u0442\u0440\u0438\u0441\u0438\u0442\u0435\u0442\u043e\u0432 \u0432\u0441\u0435\u0445 \u0432\u0435\u0440\u0448\u0438\u043d.<\/p>\n<pre><code class=\"python\">print('\u0420\u0430\u0434\u0438\u0443\u0441 \u0433\u0440\u0430\u0444\u0430:', nx.radius(deep_friends.graph)) <\/code><\/pre>\n<p>  <\/p>\n<h5>\u0410\u0432\u0442\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u043e\u0441\u0442\u044c \u0438\u043b\u0438 Page Rank<\/h5>\n<p>  \u042d\u0442\u043e\u0442 \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 <b>Page Rank<\/b>, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u044b \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u0438. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u0435\u043a \u0438\u043b\u0438 \u0438\u043d\u044b\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438. \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u0442\u0435\u043c \u043e\u043d\u0430 \u0432\u0430\u0436\u043d\u0435\u0435. \u041d\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043b\u044f \u0433\u0440\u0430\u0444\u043e\u0432. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u043d\u043e\u0435 \u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0437\u0430\u0438\u043c\u0441\u0442\u0432\u0443\u0435\u043c \u0438\u0437 \u044d\u0442\u043e\u0439 <a href=\"http:\/\/geektimes.ru\/post\/81225\/\">\u0441\u0442\u0430\u0442\u044c\u0438<\/a>:  <\/p>\n<blockquote><p>\u0410\u0432\u0442\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u043e\u0441\u0442\u044c \u0432 \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0433\u0440\u0430\u0444\u0435 \u043c\u043e\u0436\u043d\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438. \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u2014 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0440\u0435\u0431\u0435\u0440. \u0423 \u043a\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u2014 \u0442\u043e\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0442\u0435\u0442\u0435\u043d. \u0422\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0433\u043e\u0434\u0435\u043d \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0433\u0440\u0430\u0444\u043e\u0432. \u0412 \u043f\u043e\u0438\u0441\u043a\u0435 \u043f\u043e \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443 Google \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0435\u0432 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 PageRank. \u041e\u043d \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0431\u043b\u0443\u0436\u0434\u0430\u043d\u0438\u044f \u043f\u043e \u0433\u0440\u0430\u0444\u0443, \u0433\u0434\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u0437\u043b\u043e\u0432 \u2014 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0430 \u0440\u0435\u0431\u0440\u043e \u043c\u0435\u0436\u0434\u0443 \u0443\u0437\u043b\u0430\u043c\u0438 \u2014 \u0435\u0441\u043b\u0438 \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e. \u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0431\u043b\u0443\u0436\u0434\u0430\u0442\u0435\u043b\u044c \u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0433\u0440\u0430\u0444\u0443 \u0438 \u0432\u0440\u0435\u043c\u044f \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0431\u043b\u0443\u0436\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u043d\u043e\u0432\u043e. PageRank \u0440\u0430\u0432\u0435\u043d \u0434\u043e\u043b\u0438 \u043f\u0440\u0435\u0431\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0443\u0437\u043b\u0435 \u0437\u0430 \u0432\u0441\u0435 \u0432\u0440\u0435\u043c\u044f \u0431\u043b\u0443\u0436\u0434\u0430\u043d\u0438\u044f. \u0427\u0435\u043c \u043e\u043d \u0431\u043e\u043b\u044c\u0448\u0435, \u0442\u0435\u043c \u0443\u0437\u0435\u043b \u0431\u043e\u043b\u0435\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0442\u0435\u0442\u0435\u043d.<\/p><\/blockquote>\n<p>  <\/p>\n<pre><code class=\"python\">import operator print('Page Rank:', sorted(nx.pagerank(deep_friends.graph).items(), key=operator.itemgetter(1), reverse=True)) <\/code><\/pre>\n<p>  <\/p>\n<h5>\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438<\/h5>\n<p>  \u0426\u0438\u0442\u0438\u0440\u0443\u044f \u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044e:  <\/p>\n<blockquote><p>\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u2014 \u044d\u0442\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0443\u043c\u043e\u043c, \u0442\u043e\u0436\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u044b. <\/p><\/blockquote>\n<p>  <\/p>\n<pre><code class=\"python\">print('\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438', nx.average_clustering(deep_friends.graph)) <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e, \u0438 <b>networkx<\/b> \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0435\u0449\u0435 \u043c\u043d\u043e\u0433\u043e <a href=\"https:\/\/networkx.github.io\/documentation\/networkx-1.9\/reference\/algorithms.html\">\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432<\/a> (\u0430\u0432\u0442\u043e\u0440 \u043d\u0430\u0441\u0447\u0438\u0442\u0430\u043b 148), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043a \u0433\u0440\u0430\u0444\u0430\u043c. \u0412\u0430\u043c \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u0432\u0430\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432 \u0444\u0430\u0439\u043b\u0435 <b>graph.py<\/b>.<\/p>\n<h4>\u0418\u0442\u043e\u0433<\/h4>\n<p>  \u041c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0443\u044e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444 \u043e\u0431\u0449\u0438\u0445 \u0434\u0440\u0443\u0437\u0435\u0439 \u0432 \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 60 \u0440\u0430\u0437 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 (\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u043e\u0440\u043a\u0435\u0440\u043e\u0432), \u0447\u0435\u043c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 <a href=\"http:\/\/habrahabr.ru\/post\/216831\/\">\u0432\u0430\u0440\u0438\u0430\u043d\u0442<\/a> \u043e\u0442 <a href=\"http:\/\/habrahabr.ru\/users\/himura\/\" class=\"user_link\">Himura<\/a>, \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u043d\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u2014 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u0441\u0435\u0445 \u00ab\u0433\u043b\u0443\u0431\u0438\u043d\u043d\u044b\u0445 \u0434\u0440\u0443\u0437\u0435\u0439\u00bb, \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0433\u0440\u0430\u0444\u043e\u0432.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u041f\u041e \u0438 \u0432\u0430\u043c \u043d\u0430\u0434\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0439 \u0433\u0440\u0430\u0444 \u043e\u0431\u0449\u0438\u0445 \u0434\u0440\u0443\u0437\u0435\u0439 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 <a href=\"http:\/\/habrahabr.ru\/post\/221251\/\">\u0441\u0442\u0430\u0442\u044c\u0438<\/a>, \u0442\u043e <a href=\"https:\/\/github.com\/stleon\/vk_friends\/releases\/tag\/v1.0.0\">\u0441\u0442\u0430\u0440\u044b\u0439 \u0440\u0435\u043b\u0438\u0437<\/a> \u043a \u0432\u0430\u0448\u0438\u043c \u0443\u0441\u043b\u0443\u0433\u0430\u043c. \u0412 \u043d\u0435\u043c \u0432\u044b \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u0441\u0442\u0430\u0440\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u0440\u0443\u0437\u0435\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0441\u043a\u043e\u043b\u044c \u0443\u0433\u043e\u0434\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e. <\/p>\n<p>  \u042d\u0442\u043e \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u043f\u0440\u0435\u0434\u0435\u043b, \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. <\/p>\n<p>  \u041f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0436\u0434\u0443 \u043e\u0442 \u0432\u0430\u0441 \u0432\u043a\u0443\u0441\u043d\u044b\u0445 \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u043e\u0432, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0435\u0441\u044c \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!      \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/243229\/\"> http:\/\/habrahabr.ru\/post\/243229\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">     \t\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 <a href=\"http:\/\/habrahabr.ru\/post\/221251\/\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u043c\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0431\u0449\u0438\u0445 \u0434\u0440\u0443\u0437\u0435\u0439 \u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0433\u0440\u0430\u0444, \u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0443\u0437\u0435\u0439, \u0434\u0440\u0443\u0437\u0435\u0439 \u0434\u0440\u0443\u0437\u0435\u0439 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u044b \u0443\u0436\u0435 \u043f\u0440\u043e\u0447\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e <a href=\"http:\/\/habrahabr.ru\/post\/221251\/\">\u0441\u0442\u0430\u0442\u044c\u044e<\/a>, \u0438 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u043d\u043e\u0432\u043e. \u041f\u043e\u0434 \u0445\u0430\u0431\u0440\u0430\u043a\u0430\u0442\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438 \u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-243229","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/243229","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=243229"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/243229\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=243229"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=243229"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=243229"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}