Python - Как превратить поток в потокобезопасный - PullRequest
0 голосов
/ 13 октября 2018

Итак, я подумал, как сделать потокобезопасным, потому что всякий раз, когда я запускал программу, которую создал, просто для удовольствия.Я понял, что консоль получила столько спама, что оказалось недостаточно быстрой, чтобы печатать ее один за другим.

По сути, я использовал список, который не является чем-то особенным, чем простосписок различных фруктов, скажем,

list = ['apple','banana','kiwi'....]

, а затем у меня есть что-то под названием data, которое в основном распечатывается с помощью регистратора.

logger.log(data)

Полная программа будет выглядеть примерно как

 def sendData(list, data):

     logger.log(data)

 def main():
    ...
    ...
    ...
    data_list.append((list[i], data))

    for index, data in data_list:
         threading.Thread(target=sendData, args=(list, data)).start()

В общем, как мы можем видеть, это, вероятно, будет состоять из множества одновременно работающих потоков, что приведет к взаимодействию, которое заставит консоль распечатать много ошибок, поэтому теперь вопрос:

Как я могу превратить это в своего рода потокобезопасный?Разве сон для начала каждого потока был бы волшебством?

1 Ответ

0 голосов
/ 13 октября 2018

Возможно, вы захотите взглянуть на threading.Lock(), его можно использовать для предотвращения одновременного выполнения заданиями вывода нескольких потоков и, таким образом, смешивания слов в консоли:

def sendData(list, data):
    with lock:
        logger.log(data)

lock = threading.Lock()
def main():
    ...
    ...
    ...
    data_list.append((list[i], data))

    for index, data in data_list:
         threading.Thread(target=sendData, args=(list, data)).start()

Это предотвратитнесколько потоков одновременно запускают код в «with».

Когда поток X входит в блок «with», он запрашивает блокировку.Если другой поток попытается получить его (ввести блок «с»), ему придется подождать, пока поток не снимет блокировку X.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...