@Fox Привет.Я описывал задачу в этой теме https://community.bablosoft.com/topic/27417/вызов-многопоточной-функции
Дело в том,что я не могу вообще никак перевести свой скрипт на многопоток,у меня тупо,что в вызове функции в многопоток,что просто обычный многопоток,выполняет свою работу с данными по очереди,а не одновременно.И это очень сильно бьет по времени,а нужна именно скорость обработки.Все уже готово и скрипт рабочий полностью,но скорость обработки заставила воспользоваться многопотоком.Ранее,подобных проблем не замечал,а сейчас элементарную задачу не могу уже несколько дней решить.
Скрипт очень простой и работает без браузера вообще,в скрипте используется только одно взаимодействие с гет запросом.Пример скрипта я приложил в этой теме(но без запросов),он точно почти такой же,как и основа.
Логика такова:
1)Запускается скрипт (без всяких ресурсов изначально и данных) и создаются два ресурса.
2)Делается запрос на сайт,который обрабатывается в отдельной функции,т.е. обрабатывает полученные строки и записывает в ресурс.
3)Вызывается функция в несколько потоков,которая работает (должна работать) с каждой строкой из созданного ранее ресурса(уникальной)в отдельном потоке.Данные обрабатываются и записываются во второй ранее созданный ресурс.
4)Как только данные обработаны,ресурс переводится в список и список записывается в файл.Более ничего не делается.
-Сперва я думал,что проблема в создаваемых в ходе работы ресурсах,но нет.Создавал изначально ресурсы и то же самое было.
-Потом пробовал брать из файлов значения\потом создавать файлы по ходу и из них брать данные\сохранять напрямую пытался и.т.д
-Возможно думал стоят какие то ограничения из за слабого пк с 4 гб оперативы и взял сервер с 64 гб,но как обрабатывалась строка за 5 минут на моем пк,так же по скорости и на серваке.Ладно, с этим я уже ничего не поделаю из за регулярок в проекте,согласен.Но вот перевести на поток и хотя бы по 10 строк одновременно обрабатывать,очень бы помогло.А сейчас в любом случае,у меня,сколько бы потоков не выставил - работает все равно как один,просто по очереди разный поток берет свои данные(
Синхронные значения между потоками в многопоточности
-
Я так понимаю , что нельзя использовать данные между браузерами? То есть, работает только вариант , который пересоздает состояние браузера.
Нормально же работает, если разбить файл на равные части и вызывать последовательно каждую строку файла.
По факту, асинхронные функции нужны - 1, для вызова одновременно разных задач. 2, для того, если нужно сделать последовательный запуск по вложенности более 3 Различных операций как в видео.Сумирую все вышееописаное : обычная многопоточность - разбиение файла, 2 картинка.
Асинхронная - примеры из руководства + понимание как выжать максимум из ресурсов железа, убрать простои.Хорошо, а как правильно реализовывать многопоточную функцию в асинхронной? Если я например одновременно вызову 1 однопоточную асинхронную функцию, а другую многопоточную, как в них будет формироваться очередь на выполнение ?
1 .Пока не создастся группа браузеров, исходя из евентлупа.
- Будет выполняется 1 задача на одну выполненную в многопоточной асинхронной функции? Например на выполненную задача в ней , будет выполняется в однопоточном асинхронной функции?
-
@novikov433 said in Синхронные значения между потоками в многопоточности:
Я так понимаю , что нельзя использовать данные между браузерами? То есть, работает только вариант , который пересоздает состояние браузера.
Нормально же работает, если разбить файл на равные части и вызывать последовательно каждую строку файла.
По факту, асинхронные функции нужны - 1, для вызова одновременно разных задач. 2, для того, если нужно сделать последовательный запуск по вложенности более 3 Различных операций как в видео.Сумирую все вышееописаное : обычная многопоточность - разбиение файла, 2 картинка.
Асинхронная - примеры из руководства + понимание как выжать максимум из ресурсов железа, убрать простои.Хорошо, а как правильно реализовывать многопоточную функцию в асинхронной? Если я например одновременно вызову 1 однопоточную асинхронную функцию, а другую многопоточную, как в них будет формироваться очередь на выполнение ?
1 .Пока не создастся группа браузеров, исходя из евентлупа.
- Будет выполняется 1 задача на одну выполненную в многопоточной асинхронной функции? Например на выполненную задача в ней , будет выполняется в однопоточном асинхронной функции?
Ни чего не понятно, но очень интересно (c). А если серьёзно, вы бы озвучили изначальную задачу, которую пытаетесь решить
-
@Fox моя задача сейчас такова - я разбиваю файл на подфайлы и через рессурс из папки вызываю многопоточную функцию, не асинхронную.
При таком раскладе браузер сохраняет свое соотснояние и перебирает нужный для него файл.
При использовании же асинхронной многопоточности можно для каждого потока задать последовательную строку из общего файла, но тогда не сохраняется состояние браузера - логин, куки и т.д - каждый раз при создании браузера нужно вводить, загружать данные заного.Моя задача теперь такая - в какой именно последовательности будут выполнятся данные, если я во внутрь асинхронной функции засуну вызов функции в многопотоке, в которой разбиение файла с сохранением состоянием браузера - данные будут взаимозаменяемы - в начале одна строка в первом потоке, потом во втором, затем же в первом вторая и т.д, или вторая асинхронная функция будет ждать пока выполняется все потоки в первой, если не достаточно рессурсов?
-
@Fox задача самая тривиальная - у меня спамер заходит на страницу пользователей и пишет сообщения в ЛС. Я же хочу сделать, что бы каждый поток брал строку , что бы файл не нужно было разбивать на подфайлы и сохранялось состояние браузера.
Думаю нужно в вызов функции в многопотоке, не асинхронную добавить функцию разбиение файла который берется, что бы самому это не делать, типо файл временно разбивается в туже папку на указанное количество рессурса, переменной и т.д. когда же например действие завершилось файлы удаляются, оставляя только основной.
Например ещё добавить функцию заносить текущую итерацию в отдельный файл, что бы например когда возникают ошибки, удачные выполнения все пройденные удачные итерации автоматически удалялись из основного файла.
Ещё было бы прикольно сделать какой то модуль , который исходя из запросов а апи , автоматически определял оптимальное кол-во потоков, прежде чем сервер отваливался