emysql prepare и многопоточность

73 views
Skip to first unread message

Константин Константинов

unread,
Apr 29, 2015, 12:19:41 PM4/29/15
to erlang-...@googlegroups.com
Доброго дня.

Возник вопрос: как atom, передаваемый в emysql:prepare(StmtName, Statement) первым параметром подружить с многопоточностью.

Работу с emysql обернул в отдельный модуль. Там все функции работы с БД. И там значение StmtName зафиксировал хардкодом.
Получилось так, что два процесса запускаются почти одновременно и второй успевает выполнить свой prepare() до того, как первый выполнит свой execute().

Вот теперь думаю, как бы это просто исправить.

Первая мысль — создавать уникальные StmtName для каждого процесса. Но это не подойдёт — StmtName может быть только атомом. А динамические атомы, насколько я понимаю — зло.

Вторая мысль — очередь какую-то организовать. И выделять свободные атомы. Но все выделенные атомы могут оказаться заняты.

Значит в любом случае придётся ждать освобождения. А я с erlang только начал разбираться, не знаю, как бы это сделать просто.

Или можно как-то «залочить» пару команд prepare и execute, чтоб они атомарно выполнялись? Как critical section.


Мастера, подскажите.

Max Lapshin

unread,
Apr 29, 2015, 1:21:22 PM4/29/15
to erlang-...@googlegroups.com
Работу с emysql обернул в отдельный модуль.

ну и наверное надо завернуть в отдельный процесс?

Mikl Kurkov

unread,
Apr 29, 2015, 2:37:47 PM4/29/15
to erlang-...@googlegroups.com
Как-то ускользает от меня смысл использования prepare с одним и тем же StmtName для разных запросов.
Почему бы просто не использовать execute(Conn, Query, Args), оно по-моему внутри само генерит временный StmtName.

2015-04-29 20:21 GMT+03:00 Max Lapshin <max.l...@gmail.com>:
Работу с emysql обернул в отдельный модуль.

ну и наверное надо завернуть в отдельный процесс?

--
Вы получили это сообщение, поскольку подписаны на группу "Erlang по-русски".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес erlang-russia...@googlegroups.com.
Чтобы отправлять сообщения в эту группу, отправьте письмо на электронный адрес erlang-...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.



--
Mikl

Константин Константинов

unread,
Apr 29, 2015, 3:07:47 PM4/29/15
to erlang-...@googlegroups.com
Точно, самое очевидное и не увидел.
Ещё не привык к устройству erlang.

Макс, благодарю!


среда, 29 апреля 2015 г., 20:21:22 UTC+3 пользователь Max Lapshin написал:

Константин Константинов

unread,
Apr 29, 2015, 3:11:25 PM4/29/15
to erlang-...@googlegroups.com
Mikl, верно подмечено. Сейчас криво prepare использую.
Благодарю за то, что вы обратили на это моё внимание.


среда, 29 апреля 2015 г., 21:37:47 UTC+3 пользователь Mikl Kurkov написал:
Reply all
Reply to author
Forward
0 new messages