Динамическая многопоточность.



  • Доброго времени суток!

    Такая задача у меня стоит. Мне нужно реализовать динамическую многопоточность.
    То есть при каждом запуске скрипта может быть или 10 или 1 или 24 потока. Не уверен что такое можно реализовать в рамках одного скрипта, но всё же!

    В моём случае есть файл с разным количеством строк.
    Каждый поток должен обрабатывать свою строку! Так как поток принимает только ресурс или число, то я предположил, что нужно использовать парсинг строк файла в список и переменную "количество элементов в списке" я сохранил в совсем другой ресурс и его подключил в "количество потоков" и всё это в OnApplicationStart.
    По идее скрипт вначале должен считать "количество строк" в файле и сохранить в другой файл уже "число строк" и в этом другом файле будет "количество потоков".
    Естественно у меня ничего не получилось и BAS даже иногда крашил в процессе изобретения мной велосипеда.

    Как быть? Почему бы просто не подключить переменную в "Количество потоков "? или я чего то не понимаю? наверное при запуске скрипта уже сразу запускается неизменное количество потоков из ресурса, а действия в OnApplicationStart просто выполняются самыми первыми? при чём каким то 1 может быть самым последним потоком как я понял?
    скрипт приложил в архив вместе с двумя .txt файлами.

    0_1487622662122_test_multi_treads.zip



  • @sitiros Может просто взять потоков побольше и сделать так, чтобы каждый взял свою строку, а когда строки закончатся сделать условие и не перезапускать поток, а в ресурсе сделать не прерывать приложение и убрать повторное использование.(Еще можно наверно использовать функцию Закрыть браузер, чтобы уменьшить нагрузку от не работающих потоков)


  • administrators

    @sitiros

    Такая задача у меня стоит. Мне нужно реализовать динамическую многопоточность.
    То есть при каждом запуске скрипта может быть или 10 или 1 или 24 потока. Не уверен что такое можно реализовать в рамках одного скрипта, но всё же!

    В начале работы потока определяете сколько потоков должно быть, если текущий номер потока больше чем нужное количество, вызываете действие fail c параметром Не перезапускать поток.

    Но такой подход является следствием выбора неправильной архитектуры. Достаточно просто использовать систему ресурсов. Каждый поток будет брать свою строку из файла и использовать ее. Если потоков будет больше, чем строк в файле, остальные потоки будут ждать пока ресурс освободится.


Log in to reply
 

Looks like your connection to Bablosoft was lost, please wait while we try to reconnect.