Если возможно, проясните момент с закрытием канала, который мы запихиваем в коллбэк на ошибку подключения, вот для чего он закрывается, для чего вся канитель с пересозданием, с моей позиции это глупо смотрится, может я чего не знаю?
Действительно, есть такое, первая правка была как раз эта, к сожалению не помогло. Проблема была в отсутствии понимания работы каналов, ловил дедлок пока не выделил ему буфер в 1, поскольку даже при отправке в канал при нулевом буфере все вставало колом, и получал дедлок.
Александр Павлюк: panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x401948]
goroutine 1 [running]:
panic(0x5848e0, 0x12002030)
c:/go/src/runtime/panic.go:500 +0x331
main.main()
D:/go_sources/lab01/amqp_receiver_with_reconn.go:101 +0xc8
exit status 2
Ошибка: процесс завершился с кодом 1.
C:/go/bin/go.exe build -gcflags "-N -l" [D:/go_sources/lab01]
# _/D_/go_sources/lab01
.\amqp_receiver_with_reconn.go:92: main redeclared in this block
previous declaration at .\amqp_lab01.go:9
.\amqp_reconnect.go:14: amqpUri redeclared in this block
previous declaration at .\amqp_receiver_with_reconn.go:11
.\amqp_reconnect.go:18: rabbitCloseError redeclared in this block
previous declaration at .\amqp_receiver_with_reconn.go:12
.\amqp_reconnect.go:24: connectToRabbitMQ redeclared in this block
previous declaration at .\amqp_receiver_with_reconn.go:14
.\amqp_reconnect.go:41: rabbitConnector redeclared in this block
previous declaration at .\amqp_receiver_with_reconn.go:28
.\amqp_reconnect.go:58: main redeclared in this block
previous declaration at .\amqp_receiver_with_reconn.go:92
.\amqp_reconnect.go:73: syntax error: unexpected }, expecting expression
Уже изменил. collect.update({}, {"$set": doc}, upsert=True). Все данные в пределах 1 документа, вопрос в том, когда кончатся 16 мб, выделенные на документ.
Алексей Ярков: проблема в том, что у меня под 100к таких документов под запись в базу, и еще 50к уже в базе, так что не особо удачная затея делать это в цикле по одному, поэтому я здесь.
Алексей Ярков: там есть проблема - я не могу во второй параметр добавить список словарей (читай: будущих документов в базе), поскольку метод хочет словарь, в этом и проблема: он ждет статичного значения поля (полей), multi же позволяет лишь в множестве документов выставить одни и те же значения. А мне нужно вроде как сопоставить то что есть у меня, и то что есть в базе по ключу "user" в документ.
А как-то так я предпологал update, но хрень получается с ним, пробовал и upsert=True.
async def update_sorted_friends(user, cache, collect):
assert isinstance(cache, list), "uids isn't list" # list of dicts
result = await collect.update({"user":{"$in": [i["user"] for i in cache]}}, cache)
print('set_sorted_friends: %s' % repr(result))
return result
Алексей, можно с этого места поподробнее? Я смотрел документацию по update, возможен апдейт множества документов критерию (критериям), но результирующее значение будет одинаковым. Я видимо что-то недопонимаю, не могли бы вы прояснить этот момент?
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.