Как указать количество потоков в модуле Python "threading" - PullRequest
0 голосов
/ 01 марта 2019

Я новичок в многопоточном программировании Python.Но чтобы запустить мою функцию в разумные сроки, я должен ее использовать.В онлайн-учебнике я нашел следующий базовый код:

import threading

    def f(id):
        print ("thread function:",id)
        return

    for i in range(3):
        t = threading.Thread(target=f, args=(i,))
        t.start()

Вывод, который я получил:

thread function: 0
thread function: 1
thread function: 2

В моей настоящей программе у меня есть параметры, которые представляют собой строкучитать из локального файла.Я хочу передать его целевой функции.Функция target выполняет некоторую задачу, а затем записывает результаты также в локальный файл.

Мои вопросы: 1) Как я могу указать количество потоков в приведенном выше коде?

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

1 Ответ

0 голосов
/ 01 марта 2019

1) Как указать количество потоков в приведенном выше коде?

Аргументом функции range является ваше количество потоков.

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

Да, многопоточность в python может быть очень странной, если вы не будете осторожны при управлении структурами данных, которые использует ваша функция threader.Таким образом, в вашем случае в простой реализации вы можете иметь несколько потоков, записывающих одну и ту же строку в файл, если операция write не контролируется.Тем не менее, в вашем случае вы, вероятно, можете поместить строки из входного файла в queue, а затем get строку в функции нитей и записать ее в выходной файл.

...