LINUX.ORG.RU

Мультипоточная отработка скрипта, возможно?


0

1

Доброго времени суток. Есть скрипт выводящий полный список всех словоформ из словаря hunspell (спеллчекер такой). С большими словарями работает медленно, загружает только одно ядро процессора.

Можно ли как-то его модифицировать, чтоб задействовались и другие ядра? Если да, то как?

переработай интерпретатор для этого(онож опенсурс)

либо,как уже сказали-одноядерный интерпретатор+контроллер(основной скрипт управляющий другими)+куча запущенных потоков каждый в своем скрипте(глобальные переменные вынеси в переменные окружения,либо файл,либо параметры передаваемые скриптам/потокам)

anonymous
()

N скриптов в параллель, каждый занять своей частью...

I-Love-Microsoft ★★★★★
()

Доброго времени суток. Есть скрипт выводящий полный список всех словоформ из словаря hunspell (спеллчекер такой). С большими словарями работает медленно, загружает только одно ядро процессора.

Ты реально думаешь, что проблема в этом?

Можно ли как-то его модифицировать, чтоб задействовались и другие ядра? Если да, то как?

И толку с этого? У тебя будет не 2слова, а отсилы 8 в секунду? Этот вордформс работает секунд 5 для самого примитивного слова из словаря(и то это у меня), а в большом словере их сотня тысяч.

Твой скрипт - это паста из wordforms в цикле. Берёшь *.dic и выбираешь из него по слову и запускаешь wordforms с каждым. Паралельно - вперёд &, xargs, parallel etc.

Хочешь быстрее - пиши это нормально и руками.

anonymous
()
Ответ на: комментарий от anonymous

Да я знаю, что этот скрипт работает через пень колоду. В состеве hunspell есть штатная утилита для этого (hunspell-unmunch). Но с тем словарём, который нужно отработать она сегфолтится :(

Спасибо за советы.

sspphheerraa
() автор топика

Если в баше что-то пытаюсь паралелить, то только через xargs -P

vertexua ★★★★★
()

Можно ли как-то его модифицировать, чтоб задействовались и другие ядра? Если да, то как?

man 1 bash

Coprocesses A coprocess is a shell command preceded by the coproc reserved word. A coprocess is executed asyn‐ chronously in a subshell, as if the command had been terminated with the & control operator, with a two- way pipe established between the executing shell and the coprocess.

The format for a coprocess is:

coproc [NAME] command [redirections]

This creates a coprocess named NAME. If NAME is not supplied, the default name is COPROC. NAME must not be supplied if command is a simple command (see above); otherwise, it is interpreted as the first word of the simple command. When the coproc is executed, the shell creates an array variable (see Arrays below) named NAME in the context of the executing shell. The standard output of command is connected via a pipe to a file descriptor in the executing shell, and that file descriptor is assigned to NAME[0]. The stan‐ dard input of command is connected via a pipe to a file descriptor in the executing shell, and that file descriptor is assigned to NAME[1]. This pipe is established before any redirections specified by the com‐ mand (see REDIRECTION below). The file descriptors can be utilized as arguments to shell commands and redirections using standard word expansions. The process ID of the shell spawned to execute the coprocess is available as the value of the variable NAME_PID. The wait builtin command may be used to wait for the coprocess to terminate.

The return status of a coprocess is the exit status of command.

emulek
()
Ответ на: комментарий от anonymous

Словарь здесь. Распаковать этот .oxt как архив zip.

$ hunspell-unmunch russian-aot.dic russian-aot.aff

sspphheerraa
() автор топика
Ответ на: комментарий от anonymous

Факт, что копрофилия, баш и многопоточность имеют общую точку соприкосновения.

ну у кого что болит…

emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.