<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: как сделать многопоточность для бота в Telegram?]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=15845&amp;type=atom" />
	<updated>2020-11-25T10:09:19Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=15845</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как сделать многопоточность для бота в Telegram?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=143670#p143670" />
			<content type="html"><![CDATA[<p>От вас зависит.<br /><a href="http://forum.script-coding.com/viewtopic.php?pid=117565#p117565">http://forum.script-coding.com/viewtopi … 65#p117565</a><br />Тут пример такого разбора массива.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2020-11-25T10:09:19Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=143670#p143670</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как сделать многопоточность для бота в Telegram?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=143669#p143669" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong></p><p>А если во время обработки массива циклом в конец добавится новый элемент, цикл захватит его тоже?</p>]]></content>
			<author>
				<name><![CDATA[Lencore228]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40862</uri>
			</author>
			<updated>2020-11-25T09:29:39Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=143669#p143669</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как сделать многопоточность для бота в Telegram?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=143666#p143666" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Lencore228 пишет:</cite><blockquote><p>Если принимающий скрипт начнет обрабатывать один запрос, а в этот момент придет другой - обработка первого прервется? А если не прервется, то как заставить скрипт оставить на потом следующий и начать обрабатывать его после обработки предыдущего?</p></blockquote></div><p>Если во время обработки приходят новые данные, обработка прервётся, просто добавьте новое в конец массива, это не долго, и прерванная обработка массива запросов продолжится дальше с того же места где была прервана. Ничего сложного.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2020-11-24T22:56:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=143666#p143666</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как сделать многопоточность для бота в Telegram?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=143664#p143664" />
			<content type="html"><![CDATA[<p>Вряд ли можно сказать что-то конкретное, не видя кода.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2020-11-24T19:25:36Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=143664#p143664</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как сделать многопоточность для бота в Telegram?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=143658#p143658" />
			<content type="html"><![CDATA[<p><strong>teadrinker</strong></p><p>Появился вопрос по указанной функции. Когда я забираю обновления из телеграма, мой скрипт аккуратно складывает все сообщения в массив и обрабатывает их циклом по очереди. Здесь, как я понял, так не получится, либо я не понимаю, как это сделать.</p><p>Если принимающий скрипт начнет обрабатывать один запрос, а в этот момент придет другой - обработка первого прервется? А если не прервется, то как заставить скрипт оставить на потом следующий и начать обрабатывать его после обработки предыдущего?</p>]]></content>
			<author>
				<name><![CDATA[Lencore228]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40862</uri>
			</author>
			<updated>2020-11-24T17:14:04Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=143658#p143658</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как сделать многопоточность для бота в Telegram?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=143633#p143633" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p><a href="https://www.autohotkey.com/docs/commands/OnMessage.htm#SendString">https://www.autohotkey.com/docs/command … SendString</a></p></blockquote></div><p>Спасибо, думаю, это то, что нужно. Идею вроде понял, пытаюсь осуществить, но пока не до конца понял механизм работы.</p><div class="quotebox"><cite>Alectric пишет:</cite><blockquote><p><a href="http://forum.script-coding.com/viewtopic.php?id=15689">http://forum.script-coding.com/viewtopic.php?id=15689</a><br />Там указано два потока, но можно и больше сделать.</p></blockquote></div><p>Я почитал этот топик перед созданием своего, но для меня код оказался сложноват, я не смогу его ни полноценно использовать, ни как-то подстроить под себя.</p><div class="quotebox"><cite>KusochekDobra пишет:</cite><blockquote><p>Прошу прощения за, возможно, не к месту сказанное.</p><p>Предлагаю рассмотреть решение на Python 3.7+.<br />Это типичная I/O-bound задача и как оказалось, асинхронный интерфейс современного Питона справляется с этим идеально. Дело в том, что порождаемые корутины и таски запускаются в одном цикле событий, а значит у них общая память и не нужны все эти пляски с SharedMemory, отправкой сообщений и прочее. Просто пишете асинхронный код, который(в отличие от асинхронного JavaScript) выглядит, как синхронный и это работает. </p><p>Было дело, тоже встала острая нужда в большом количестве обработки ввода/вывода и на AHK, в принципе можно оседлать эту затею, но чем больше в эти рамки пытаешься запихнуть, тем больнее когда падает фрагментированное по инстансам приложение.</p><p>AHK невероятно удобен и соблазняет собой решать абсолютно всё, но к сожалению, именно для этого типа задач он приспособлен плохо.</p><p>Да, это определённо про то, чтобы узнать что-то новое, но это новое как глоток свежего воздуха. Весь стейт в одном процессе. Работает так, будто каждый I/O-вызов обрабатывается в отдельном потоке, но при этом нет блокировок, накладных расходов связанных с менеджментом памяти, когда надо описывать &quot;семафоры&quot;, &quot;мьютексы&quot; и прочие механизмы, в понимании которых и разбираться не охота. Просто пишешь логику, основанную на состоянии. Творишь! Остальное делает Python.</p></blockquote></div><p>Про переход на другой язык мне уже неоднократно говорили, но да, как написано, этот совет про прыжок во что-то новое. У меня нет технического образования, это хобби, поэтому вряд ли хватит усидчивости и времени на изучение новых дисциплин. Но ощущение того, что пишу бота из палок и трамвайной ручки не отпускает. </p><p>Всем спасибо за ответы</p>]]></content>
			<author>
				<name><![CDATA[Lencore228]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40862</uri>
			</author>
			<updated>2020-11-23T16:04:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=143633#p143633</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как сделать многопоточность для бота в Telegram?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=143615#p143615" />
			<content type="html"><![CDATA[<p>Прошу прощения за, возможно, не к месту сказанное.</p><p>Предлагаю рассмотреть решение на Python 3.7+.<br />Это типичная I/O-bound задача и как оказалось, асинхронный интерфейс современного Питона справляется с этим идеально. Дело в том, что порождаемые корутины и таски запускаются в одном цикле событий, а значит у них общая память и не нужны все эти пляски с SharedMemory, отправкой сообщений и прочее. Просто пишете асинхронный код, который(в отличие от асинхронного JavaScript) выглядит, как синхронный и это работает. </p><p>Было дело, тоже встала острая нужда в большом количестве обработки ввода/вывода и на AHK, в принципе можно оседлать эту затею, но чем больше в эти рамки пытаешься запихнуть, тем больнее когда падает фрагментированное по инстансам приложение.</p><p>AHK невероятно удобен и соблазняет собой решать абсолютно всё, но к сожалению, именно для этого типа задач он приспособлен плохо.</p><p>Да, это определённо про то, чтобы узнать что-то новое, но это новое как глоток свежего воздуха. Весь стейт в одном процессе. Работает так, будто каждый I/O-вызов обрабатывается в отдельном потоке, но при этом нет блокировок, накладных расходов связанных с менеджментом памяти, когда надо описывать &quot;семафоры&quot;, &quot;мьютексы&quot; и прочие механизмы, в понимании которых и разбираться не охота. Просто пишешь логику, основанную на состоянии. Творишь! Остальное делает Python.</p>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2020-11-22T05:57:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=143615#p143615</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как сделать многопоточность для бота в Telegram?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=143614#p143614" />
			<content type="html"><![CDATA[<p><a href="http://forum.script-coding.com/viewtopic.php?id=15689">http://forum.script-coding.com/viewtopic.php?id=15689</a><br />Там указано два потока, но можно и больше сделать.</p>]]></content>
			<author>
				<name><![CDATA[Alectric]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26027</uri>
			</author>
			<updated>2020-11-22T04:38:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=143614#p143614</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: как сделать многопоточность для бота в Telegram?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=143605#p143605" />
			<content type="html"><![CDATA[<p><a href="https://www.autohotkey.com/docs/commands/OnMessage.htm#SendString">https://www.autohotkey.com/docs/command … SendString</a></p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2020-11-21T17:38:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=143605#p143605</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: как сделать многопоточность для бота в Telegram?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=143604#p143604" />
			<content type="html"><![CDATA[<p>Приветы. У меня довольно жирный игровой бот для телеграма (5.2к строк), суть сводится к дуэлям между игроками в разных мини-играх. Проблема довольно очевидна - однопоточность. Бот обрабатывает все запросы по очереди, это вызывает задержку при большом количестве запросов. Плюс если я хочу сделать задержку между сообщениями, она распространяется на всех пользователей.</p><p>Добрые люди мне посоветовали разделить бота на сервисы, то есть чтобы разные команды, игры и функции выполняли разные скрипты в разных потоках, и это решение меня устраивает. Очередь обработки на игру лучше, чем очередь обработки абсолютно всех запросов. И вопрос - как это сделать?</p><p>База данных в INI файлах в папке, все работает довольно быстро. Скрипт каждые 100 мс собирает апдейты с телеграма, складывает их в массив, затем преобразует JSON объекты в понятные для AHK и уже обрабатывает. Как я понимаю, можно запустить несколько скриптов: обработка главного меню и обработка для каждой из 4 доступных игр (всего 5). </p><p>Получается, должен быть главный скрипт, который будет собирать апдейты и посылать их нужным скриптам на обработку. В каком виде их посылать? Получается тут вопрос реализации бесперебойного сообщения JSON-объектов между двумя скриптами. Через память, через временные файлы или еще не пойми как.</p><p>Помогите, пожалуйста. Если вы хотите предложить конкретный способ, то приложите понятный пример, по которому я мог бы использовать этот способ или правильно загуглить.</p>]]></content>
			<author>
				<name><![CDATA[Lencore228]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40862</uri>
			</author>
			<updated>2020-11-21T16:50:15Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=143604#p143604</id>
		</entry>
</feed>
