
Игорь
18.05.2018
16:59:56
всмысле должно быть ключики ключиками, а по ключикам данные. А у тебя в ключиках данные?

Aleksey
18.05.2018
17:00:13
Да
Но в одном месте отдаются только данные без ключей.

Google

Aleksey
18.05.2018
17:01:22

Игорь
18.05.2018
17:01:42
if type(t) == dict: проверяем на тип, если есть, то как со словарем, если нет, то как со списком
кстати, у мебя что, во входящем json нет строгой структуры?

Aleksey
18.05.2018
17:05:11
Это API. Не мое

Игорь
18.05.2018
17:10:27

Aleksey
18.05.2018
17:10:52
Ну так я же говорил
в одних случаях возвращяется: t = {"any key": "any data"}
И в двух случаях t = {"any data"}

Google

Aleksey
18.05.2018
17:11:44

Игорь
18.05.2018
17:12:17
хотя после парсинга, если в json имеется только одно значение, то будет так: ["any data"]
стоп, сам запутался
наоборот. https://docs.python.org/3/library/json.html

Aleksey
18.05.2018
17:15:19
['029', '100yen Locker', '108-Gou'],
это то что без ключей приходит
мне приходит:
{'title': 'Light Novel Illustrators', 'ajax_content': 'illustrator', 'alphabet': 'all', 'limit': '3', 'persons_list': ['029', '100yen Locker', '108-Gou'], 'total_persons': '1463'}

Игорь
18.05.2018
17:16:21

Aleksey
18.05.2018
17:17:25
Потом я делаю
json_data = json.loads(str(res.text)).get('persons_list', [])
и после того как циклом прохожусь получаю строку
А в других я получаю: [{'label_title': '2D Dream Bunko'}, {'label_title': '2D Dream Novels'}]

Игорь
18.05.2018
17:31:09
если у тебя по одному ключу всегда прилетает словарь, по другому список, а по третьему строка, то не городи огородов, и проверяй только наличие ключа, и если он есть, парсь данные, если нет, проверяй следующий ключ

Aleksey
18.05.2018
17:41:50
Так я проверку в цикле делаю

Google

Aleksey
18.05.2018
17:43:37
И в тех случаях где список, будет строка (в цикле)

Игорь
18.05.2018
17:44:44

Aleksey
18.05.2018
17:45:12
Частично:D
Но с условиями нормальн овсе работает

Игорь
18.05.2018
17:45:36
или ты что-то там такое накрутил, что у тебя прям проблемы вылетают

Aleksey
18.05.2018
17:46:13
Могу пример jsona кинуть
Для двух случаев

Игорь
18.05.2018
17:53:49

Aleksey
18.05.2018
17:58:43
https://pastebin.com/HTEi7aUj

Игорь
18.05.2018
18:15:04

Aleksey
18.05.2018
18:15:52
Строго не судите, я питон н енастолько хорошо знаю)

Игорь
18.05.2018
18:19:43
тебе проверять на тип надо то, что у тебя get возвращает

Aleksey
18.05.2018
18:20:05
Ну а я про что говорил
Я писал что в одном случае ключи есть, а в двух их просто нет)

Игорь
18.05.2018
18:21:31

Aleksey
18.05.2018
18:22:35
Для записи в бд

Игорь
18.05.2018
18:23:35
Для записи в бд
сначала нормализируй данные, собери их в один словарь, а потом пройди по этому словарю и запиши в бд
не смешивай котиков и печеньки, иначе долго шерстью плеваться будешь потом))

Aleksey
18.05.2018
18:28:55

Google

Игорь
18.05.2018
18:31:00
Для записи в бд
смотри, в моем коде, все данные сводятся в один список, который является очередью для второго потока, пишущего в базу. А сама функция записи унифицирована и очень маленькая. всего один запрос.

Aleksey
18.05.2018
18:36:24

Dmitry
19.05.2018
11:47:42
Согласно документации GIL пробуждает\усыпляет потоки в тот момент времени, когда потоки не трогают какие-то общие данные. И тут же написано, что он делает это каждые 5мс. Вопрос как это все вяжется?

Pavel
19.05.2018
13:18:47
Вроде логично

Dmitry
19.05.2018
13:22:38
За 5мс поток может не успеть данные обработать

Anton
19.05.2018
13:24:35

Dmitry
19.05.2018
13:25:18
Ага. В потом просыпается и кто то уже попортил данные к которым он обращаться начал

Anton
19.05.2018
13:25:43
да, такое бывает, память общая
для этого нужны всякие боркировщики типа мьютексов, семафоров

Alex
19.05.2018
14:04:34
За 5мс поток может не успеть данные обработать
Планировщику все равно обработает поток данных за 5 сек или нет, в случае системного планировщика он вообще работает в слепую подгружая в TSS состояние регистров из ядра и восстанавливая контекст выполняет N тактов(если еще прерывания не произошло). Так что случай "В потом просыпается и кто то уже попортил данные" это уже руки разработчика. Если 2 дескриптора создано в 2 процессах на одну и ту же файловую ноду, то это вопрос синхронизации данных процессов
А GIL по сути тот же самый шедулер который просто должен распределять время выполнения со встроенной синхронизацией. типо control flow над несколькими контекстами

Eugene
19.05.2018
15:49:14
Друзья, а кто-нибудь уже юзал APIStar на проде? Что скажите про него?

Alex
19.05.2018
16:22:46
подскажите, как взять первый разряд двоичного числа для сравнения

Ulan
19.05.2018
18:08:14
Здравствуйте

xPushkin
19.05.2018
18:08:24
Привет

Ulan
19.05.2018
18:09:47
Как дела программисты
?

Google

V
19.05.2018
18:30:39

Aleksey
20.05.2018
01:09:31
Ребят, подскажите пожалуйста по потокам. Есть входные данные (20000 ссылок). Хочу запустить 4 и более потоков, в каждом выполнять парсинг с интервалом запрос в 4 секунды. Может кто пример написать? С потоками еще ни разу не работал..

Максим
20.05.2018
07:38:42

Alex
20.05.2018
09:34:08
у меня возникает зацикленная рекурссия можете по коду подсказать, что я делаю не так?

xPushkin
20.05.2018
09:34:47

Alex
20.05.2018
09:36:31
def recurssion(str):
if len(str)>1:
b=str[0]
for i in str[1?:
if i in "{}[]()":
if i in "([{":
recurssion(str[str.index(i)?)
elif i==")" and b=="(":
break
elif i=="]" and b=="[":
break
elif i=="}" and b=="{":
break
else:
return False
else:
return False
def checkio(expression):
for i in expression:
if i in "({[":
recurssion(expression[expression.index(i)?)
return True

Aleksey
20.05.2018
09:38:18

Alex
20.05.2018
09:39:33
if i in "({[":
..
if i in "([{":
recurssion(str[str.index(i)?)
Думаю здесь пахнет жареным

Pavel
20.05.2018
09:42:12

Игорь
20.05.2018
09:42:22
блин, юзайте режим вставки кода, смайлики бесят

Aleksey
20.05.2018
09:42:37
как?
Вижу слеш

Игорь
20.05.2018
09:43:18
кнопка возле единички, там апостроф
`