
Сергей
02.01.2019
09:43:13
Чтобы сделать, как хочешь ты, нужно немного переписать логику

Marperia
02.01.2019
09:46:09
У меня вопрос не совсем по питону, но раз уж я на нём пишу, решил задать его здесь.
Есть задача запускать selenium на удалённом сервере, но сервер, сами понимаете, GUI не поддерживает. Эмулировать дисплей или использовать PhantomJS тоже не выход.
Как запустить geckodriver в headless-режиме? Если ответ лежит в гугле по первой ссылке, то извините, я в глаза ебусь.

Maxim
02.01.2019
09:46:37

Andrii [R11]
02.01.2019
09:48:27

Google

Andrii [R11]
02.01.2019
09:48:46
Ещё знакомый делал через заглушку под иксы как-то. Спрошу

Marperia
02.01.2019
09:48:53

Сергей
02.01.2019
09:50:55
а на основании какого принципа изменять логику)?
Нужно подумать, как постоянно добавлять новые задачи в евентлуп, не дожидаясь выполнения текущих, а выполненные обрабатывать.
Но... Даже с синхронным кодом, с постоянным запросом будет проблемы с сайтом (блокировка)

Marperia
02.01.2019
09:55:49

Сергей
02.01.2019
09:56:25
Я видел множество примеров по поиску python selenium chrome headless

Marperia
02.01.2019
09:57:47
Всё, нашёл, как сделать в фф. Всем спасибо.

Владимир
02.01.2019
10:57:06
а на основании какого принципа изменять логику)?
Надо начать с того, что машина, если это одно ядро, выполняет задачи последовательно. Все "одновременные" задачи исполняются за счет переключения контекста с высокой скоростью. Над голым железом есть несколько слоев абстракции: биос, пользовательская ос, интерпретатор питона. В последнем есть еще и гил. В питоне I/O задачи неблокирующиеся. Гил встречая такую старается передать управление на следующую, пока будет эта выполняться. Синхронная модель предполагает, что придется дождаться завершения запроса, получить результат и перейти к следующему. Асинхронная позволяет запустить соединение и перейти к следующей задаче. Если каждый раз устанавливать новое соединение или к разным ресурсам обращаться, это существенный прирост. Но есть же еще сеть, время обработки запроса хостом и т.д. Вот с учетом всех этих переменных и надо строить обработку

Sergey
02.01.2019
11:09:55


Maxim
02.01.2019
11:10:03
Надо начать с того, что машина, если это одно ядро, выполняет задачи последовательно. Все "одновременные" задачи исполняются за счет переключения контекста с высокой скоростью. Над голым железом есть несколько слоев абстракции: биос, пользовательская ос, интерпретатор питона. В последнем есть еще и гил. В питоне I/O задачи неблокирующиеся. Гил встречая такую старается передать управление на следующую, пока будет эта выполняться. Синхронная модель предполагает, что придется дождаться завершения запроса, получить результат и перейти к следующему. Асинхронная позволяет запустить соединение и перейти к следующей задаче. Если каждый раз устанавливать новое соединение или к разным ресурсам обращаться, это существенный прирост. Но есть же еще сеть, время обработки запроса хостом и т.д. Вот с учетом всех этих переменных и надо строить обработку
но вот же Сергей сделал асинхронно, но прироста не случилось
"Нужно подумать, как постоянно добавлять новые задачи в евентлуп, не дожидаясь выполнения текущих, а выполненные обрабатывать."
это звучит очень сложно для простой задачи получать текст странички


Владимир
02.01.2019
11:19:03

Google

Magzhan
02.01.2019
11:25:39
Какой помощь?

Maxim
02.01.2019
11:27:40
посмотри scrapy
так это ж то же самое, нет гайдов, как загружать одну и ту стра ницу)

Владимир
02.01.2019
11:35:36
зачем одну и ту же?

Alexandr
02.01.2019
11:41:58
Добрый день, друзья!
Подскажите, пожалуйста ...
Есть СПИСОК (импортированный из ***.txt):
742 Ветеринарные услуги
763 Сельско-хозяйственные кооперативные общества
780 Ландшафтные и садоводческие магазины
1520 Генеральные подрядчики - жилищное и торговое строительство
1711 Генеральные подрядчики по вентиляции, теплоснабжению, и водопроводу
1731 Подрядчики по электричеству
1740 Изоляция, мозаика, штукатурные работы, каменная кладка, облицовка плиткой
В консоли он выводится по средством команды:
f = open ("list.txt")
Каким образом можно организовать поиск и вывод строки по его фрагменту?
(напр. ввожу «742», выдаёт «Ветеринарные услуги».

Maxim
02.01.2019
11:45:06
зачем одну и ту же?
потому что мне надо загружать контент 1 и той же страницы, чтобы как можно быстрее среагировать на изменение оного)

Dark
02.01.2019
11:45:15
и число будет ключем словаря

Владимир
02.01.2019
11:46:09

Dark
02.01.2019
11:46:39
ну или оставить как есть и
иф 12345 ин стринг - принт стринг и цикл

?? Eugene
02.01.2019
11:48:24

Alexandr
02.01.2019
11:50:35

Ы.
02.01.2019
11:50:58
Вопрос на засыпку как-то можно получить быстро пайчарм про без покупки?

Влад
02.01.2019
11:51:51

Ы.
02.01.2019
11:52:06
Опять фоткать свой студенчский
и слать его куда,да ну

Влад
02.01.2019
11:52:25
Ну если есть почта, то не особо

Ы.
02.01.2019
11:52:52

Влад
02.01.2019
11:52:53
Почта @edu

Google

Никита
02.01.2019
11:52:54

Ы.
02.01.2019
11:52:57
пример?

Влад
02.01.2019
11:53:40
Какой домен универа ?
Почты

Maxim robox
02.01.2019
11:53:46

Ы.
02.01.2019
11:54:28
Почты
ок,возьму с интернета и кину им

Влад
02.01.2019
11:54:37
Нет
Там нужно подтвердить, ввести код из письма

Ы.
02.01.2019
11:55:37
Ладно,щас буду смотреть
Просто у моего учебного заведения нет почты в примерном домене
как указано в брейн

Ы.
02.01.2019
11:56:45
в mit.edu

Владимир
02.01.2019
11:56:48

Ы.
02.01.2019
11:57:26

Tishka17
02.01.2019
11:57:35

Владимир
02.01.2019
11:58:09

Ы.
02.01.2019
11:58:39
окай

Maxim
02.01.2019
11:59:52

Google

Сергей
02.01.2019
12:00:06
Выглядит как синхронный код
Абсолютно так. Это синхронный код с асинхронными методами. Ищем возможность запускать бесконечный цикл задач с определенным количеством запросов в секунду, с обработкой результатов по мере их возврата

Maxim
02.01.2019
12:00:32
мб тут мультипроцессинг поможет?

Владимир
02.01.2019
12:01:07

Сергей
02.01.2019
12:02:31

Tishka17
02.01.2019
12:04:21

Maxim
02.01.2019
12:04:54
не надо треды, на впс 1 ядро по идее

Сергей
02.01.2019
12:05:14

Admin
ERROR: S client not available

Tishka17
02.01.2019
12:05:28
Вообще не понял как связано

Maxim
02.01.2019
12:06:34
а, я перепутал их друг с другом

Tishka17
02.01.2019
12:06:54
С кем?

Maxim
02.01.2019
12:07:05
Multithreading Multiprocessing

Tishka17
02.01.2019
12:07:25
И все равно, при чем тут ядра?

Maxim
02.01.2019
12:07:46
multiprocessing library uses multiple CPU cores

Tishka17
02.01.2019
12:08:00
При наличии

Владимир
02.01.2019
12:08:15

Maxim
02.01.2019
12:14:18
from threading import Thread
import requests
import time
class myClassA(Thread):
def __init__(self):
Thread.__init__(self)
self.daemon = True
self.start()
def run(self):
while True:
r = requests.get('https://medium.com/_/api/users/913e7ed84452/profile/stream')
print(r.status_code, time.time())
for i in range(10):
myClassA()

Andrii [R11]
02.01.2019
12:15:39
смог выбить time paradox из вызова time.time() в разных потоках без синхронизации?
1| time: 10.003
2| time: 10.006
3| time: 10.001
Типа такого

Google

Maxim
02.01.2019
12:17:07
нет, а должен был?

Andrii [R11]
02.01.2019
12:17:31
такая ситуация очень вероятна.
Но если кто-то объяснит или опровергнет - было бы клево.

Владимир
02.01.2019
12:19:26

Maxim
02.01.2019
12:19:47
ну я выберу такую частоту, с которой они не будут меня блоичть

Владимир
02.01.2019
12:20:10
так а нафига тогда потоки?)))))

Maxim
02.01.2019
12:20:59
в смысле нафига
без потоков 3 раза в секунду они не блочат
с десятью потоками получается 30 раз в секунду, они не блочат пока что

?? Eugene
02.01.2019
12:23:48

Владимир
02.01.2019
12:23:51
интерпретатор)

Maxim
02.01.2019
12:24:16

?? Eugene
02.01.2019
12:24:58
сервера можно настроить миллионом разных способов

Maxim
02.01.2019
12:27:08
но все равно не вижу, в чем тут проблема, если перестанут 200 отдавать, снижу количество потоков

Sergey
02.01.2019
12:27:13
я бы банил по айпи таких вот дудосеров ?

Maxim
02.01.2019
12:27:49
если бы у них были вебсокеты, все были бы только рады)

Сергей
02.01.2019
12:29:23
Чтобы вывод был не такой корявый, лучше использовать mutex
from threading import Thread, Lock
...
mutex = Lock()
...
try:
mutex.acquire()
print(response.status_code, time())
finally:
mutex.release()
...

Владимир
02.01.2019
12:30:44

Maxim
02.01.2019
12:30:56

Владимир
02.01.2019
12:31:18

Maxim
02.01.2019
12:31:54
я в это не умею)